SQLにおけるグループ化と集約関数
グループ化と集約関数
group by 句
group by 句を使うと、テーブルの内容をグループに分けて集約できる。
代表的な集約関数は以下。
集約関数は複数の値を受け取り、1つの値を返すような関数のこと。
・合計する(sum( ))
・平均する(avg( ))
・最大値(max( ))
・最小値(min( ))
・行数を数える(count( ))
1 2 3 |
select gender, avg(height) from members group by gender; |
桁数を指定する(to_char(x, y))
avg(height)の結果が165.0000000000の時
to_char(avg(height), '999.99')で165.00にすることができる。
nullを強制的に0に変換する(coalesce(x, y))
min(height)の結果がnullのとき、
coalesce(min(height), 0)で、nullを強制的に0に変換できる。
having句
group by 句によって行をグループ化できる。
having句を使うと、それらのグループに対して選択条件を指定できる。
性別でグループ化してから、平均身長が170cm以上のグループだけを表示
1 2 3 4 |
select gender, avg(height) from members group by gender having avg(height) >= 170; |
where句とhaving句の違い
・where句はテーブルの行を対象とする。group by句の前に実行される。
・having句はグループを対象とする。group by句の後に実行される。
よくある間違い
group by 句を使うと、select句に指定できるのは
「グループ化のキー」と「集約関数の呼び出し」だけ。
これ以外を指定すると、構文エラーになる。
グループ化のキーに式を使う
名前の長さでグループ化し、それぞれの人数を数える
1 2 3 |
select length(name), count(*) from members group by lenght(name); |
列名は式の一種なので、当然group by 句にも式を指定できる。
その他の集約関数
・ string_agg( ):文字列を連結する
・ array_agg( ):複数の値を配列にする
・ json_object_agg( ):JSON データを作る
・ json_agg( ):JSON 配列を作る
最後に
group by句を使うと、構文エラーが出ることが多かったのですが、今回その原因を知れてよかったです!またSQLの記事書きます!