MySQLおよびウィンドウ関数


30

MySQLウィンドウ関数をサポートしていないようです。
たとえば、シンプル:COUNT(*) OVER() AS cnt動作しません。
これが商用バージョンにも当てはまるかどうかはわかりません(コミュニティバージョンは限定的なサブセットであると想定しています)。
そうでない場合、この欠落機能をどのように回避しますか?


3
MySQL Serverのコミュニティ版は、意味のある意味で限定されたサブセットではありません。違いは、コア機能に影響しないアドオンとプラグインにあります。
マイケル-sqlbot

この回避策を見て、ここここに
StuartLC

実際、MySQL9はそれをサポートしています。代わりにパンダを使っています
アンドリュースコットエヴァンス

1
MySQL 8はウィンドウ機能をサポートしています。参考:dev.mysql.com/doc/refman/8.0/en/window-functions.html
gvgvgvijayan

MySQLはバージョン8.0以降のウィンドウ関数をサポートしています。このリンクが役立つ場合があります。
ハミドMohayeji

回答:


36

MySQLはウィンドウ関数(*)をサポートしていません。GROUP_CONCAT()の形式で「貧しい人の窓関数」と呼ぶものがあります。

GROUP_CONCATウィンドウ関数をエミュレートするために使用する多くのトリックがあります。それらは(構文的に)それほど美しくなく、時には制限が多すぎます。いくつか書きました。欠落しているウィンドウ関数について不平を言っている私のブログ投稿、およびに基づくさまざまなソリューションへのリンクを参照してくださいGROUP_CONCAT

特に、GROUP BYおよびSQL で特定の非集約列データを選択する:グループごとに上位Nレコードを選択する、別のソリューションが興味を持ち、キックスタートを提供できます。

あなたが注意すべきことGROUP_CONCAT()

  • 使える DISTINCT
  • 使える ORDER BY ... ASC/DESC
  • 設定可能 SEPARATOR
  • 集計関数として-NULL値を破棄します。その上でたくさんのトリック。

(*)MySQL 8でウィンドウ関数のサポートが追加されました


MySQLは、バージョン8以降のウィンドウ関数をサポートしています
最大

GROUP_CONCATはウィンドウ関数ではなく、順序付けられたセット関数です。
SQLRaptor

1
@SQLRaptor誰もそれを主張していません。
ypercubeᵀᴹ

11

MariaDB 10.2(2017年5月にリリース)には、 ウィンドウ機能。MySQLとウィンドウ関数が必要な場合、これは確かに追求すべき1つの方法です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.