あるカラムの値について、以下のSQLでヒストグラムが作れます。COLUMN_NAME
にはカラム名を指定して下さい。TABLE_NAME
にはテーブル名を指定して下さい。BIN_NUM
にはビンの数(階級数)を数値で指定して下さい。
WITH stats AS ( SELECT MIN(COLUMN_NAME) AS min_COLUMN_NAME, MAX(COLUMN_NAME) - MIN(COLUMN_NAME) AS range_COLUMN_NAME, BIN_NUM AS bin_num FROM TABLE_NAME ), bins AS ( SELECT FLOOR((COLUMN_NAME - min_COLUMN_NAME) / (range_COLUMN_NAME / bin_num)) AS bin FROM TABLE_NAME, stats ) SELECT bin, COUNT(bin) AS count FROM bins GROUP BY bin ORDER BY bin ASC
以下のような出力が得られます
内容の解説
WITH
式を使って、ヒストグラム作成に必要なデータを集めた一時テーブルを作成しています。WITH
で作成された一時テーブルは後続のSELECT
内で参照できます。
WITH stats
では最小値やビンの幅を算出しています。WITH bins
では階級値を算出しています。
最後のSELECT 〜
で階級値を集約してヒストグラムにしています。
Webエンジニアをやっています
UX/UIデザインからプログラミング、DB設計、SEO、インフラ構築など幅広く対応してます
PHP/PHPUnit/Laravel/Vue/Nuxt/Docker/Terraform
ご連絡はTwitterのDMまで。