SQLite - グループ化(GROUP BY)
指定したカラム毎にグループ化して、そのグループ内で処理を行う
sqlite> select * from AAA; tt cate val ---------- ---------- ---------- aaa A 1.0 bbb A 2.0 aaa A 3.0 bbb B 4.0 aaa B 5.0 bbb B 6.0 aaa C 7.0 bbb C 8.0
selectにカラム名のみ記述した場合は、そのグループでの最初のレコードのみが出力される。グループ化対象を条件選択したい場合はwhere句を使用する。
sqlite> select * from AAA group by tt; tt cate val ---------- ---------- ---------- aaa A 1.0 bbb A 2.0 sqlite> select * from AAA group by tt,cate; tt cate val ---------- ---------- ---------- aaa A 1.0 aaa B 5.0 aaa C 7.0 bbb A 2.0 bbb B 4.0 bbb C 8.0 sqlite> select * from AAA where cate <> 'B' group by tt,cate; tt cate val ---------- ---------- ---------- aaa A 1.0 aaa C 7.0 bbb A 2.0 bbb C 8.0
なので通常は集計関数等を使用する。
sqlite> select tt,cate,count(*) from AAA group by tt,cate; tt cate count(*) ---------- ---------- ---------- aaa A 2 aaa B 1 aaa C 1 bbb A 1 bbb B 2 bbb C 1
グループ化した結果に対して条件を付けたい場合はHAVING句で記述する。
sqlite> select tt,cate,count(*) from AAA group by tt,cate having tt='aaa'; tt cate count(*) ---------- ---------- ---------- aaa A 2 aaa B 1 aaa C 1 sqlite> select tt,cate,count(*) from AAA group by tt,cate having count(*)>1; tt cate count(*) ---------- ---------- ---------- aaa A 2 bbb B 2