web-dev-qa-db-ja.com

MySQLとウィンドウ関数

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

30
Cratylus

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

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

特に、 GROUP BYで特定の非集計列データを選択する および SQL:グループごとに上位Nレコードを選択する、別のソリューション は、興味があるかもしれません。キックスタート。

GROUP_CONCAT()について注意すべき点:

  • DISTINCTを使用できます
  • _ORDER BY ... ASC/DESC_を使用できます
  • SEPARATORを設定できます
  • 他の集約関数と同様に、NULL値を破棄します。たくさんのトリック。

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

36
Shlomi Noach

MariaDB 10.2(2017年5月にリリース)には ウィンドウ関数 があることに注意してください。 MySQLとウィンドウ関数が必要な場合、それは確かに追求する1つの方法です。

11
chx