■ はじめに
SQL の GROUP BY句について取り上げる
目次
【1】GROUP BY 【2】構文 【3】サンプル 例1:コードごとに合計金額を算出する 例2:年月ごとのスケジュール数を表示 【4】使用上の注意 1)SELECT文に書くことができるカラムに制限がある 2)GROUP BY句にAS句で指定した別名は指定不可 3)GROUP BY句に並び替え機能はない 4)GROUP BY句の結果を条件絞り込みしたい場合はHAVING句
【1】GROUP BY
* データを集結する * 複数でもグルーピングも可能
【2】構文
SELECT 【列名】 FROM 【テーブル名】 GROUP BY 【列名】;
【3】サンプル
例1:コードごとに合計金額を算出する
SELECT code, SUM(price) FROM item GROUP BY code;
例2:年月ごとのスケジュール数を表示
SELECT CONVERT(char(4), YEAR(date)) + '/' + CONVERT(char(2), MONTH(date)) AS YearMonth, COUNT(*) AS ScheduleCount FROM Schedule GROUP BY CONVERT(char(4), YEAR(date)) + '/' + CONVERT(char(2), MONTH(date))
【4】使用上の注意
1)SELECT文に書くことができるカラムに制限がある
* GROUP BY句を使用した場合、SELECT文で表示させるには、 以下のいずれかになる [1] GROUP BY句で指定されたカラム(集約キー) [2] 集約関数(sum, count etc...) [3] 定数
例
SELECT code, companyName, branchName FROM company AS c JOIN branch AS b ON c.code = b.companyCode GROUP BY code, companyName;
2)GROUP BY句にAS句で指定した別名は指定不可
SELECT NAME AS N, COUNT(*) FROM person GROUP BY N -- これができない。 ;
3)GROUP BY句に並び替え機能はない
* 並び替えはORDER BY句で指定する
4)GROUP BY句の結果を条件絞り込みしたい場合はHAVING句
* WHERE句では、 GROUP BY句の結果を条件絞り込むことができないため、 代わりに HAVING句を使う => WHERE句は、GROUP BY句よりも前に実行される => HAVING句については、以下の関連記事を参照のこと
HAVING句
https://dk521123.hatenablog.com/entry/2010/07/13/154947
参考文献
http://blog.livedoor.jp/akf0/archives/51064573.html
http://2ndgd.blogspot.com/2010/12/sql-server.html
関連記事
SQL ~ HAVING句 ~
https://dk521123.hatenablog.com/entry/2010/07/13/154947
パフォーマンスの良いSQLを記述 ~検索条件編~
https://dk521123.hatenablog.com/entry/2012/05/05/003504
複合キーの重複データを取得することを考える
https://dk521123.hatenablog.com/entry/2022/06/06/125440
グループ内のMAXデータを取得する
https://dk521123.hatenablog.com/entry/2018/10/06/230841
複数の集計を1回のSQL文で行う方法を考える
https://dk521123.hatenablog.com/entry/2018/04/12/210108