PostgreSQL で最も出現する値(最頻値・モード)を取得する方法
少し大きめのデータベースで、多数決で集約してくれと、気軽に鬼のような要望が来た。
データベースで再頻値を取得する方法は、これまでHAVING句とサブクエリを使用するなど、なかなか見かけがエクセレントにならなかった。
PostgreSQL9.4では集約関数も大幅に強化されており、最頻値も簡単に取得できるようになった。
mode.sql
SELECT mode() WIHTHIN GROUP (ORDER BY カラム名) AS お好きな名前 FROM テーブル名
およそSQLとは思えない書き方だけど、ちゃんと出る。
たぶん、次回使う機会には確実に忘れると思うので、ここにメモ。
カラム名の代わりに計算式を書いても良い。
そこは普通のORDER BYと同じ。
しかし、ちょっと遅い。
インデックスと併用すると多少は速くなるのかもしれないが。