GROUP BY句, HAVING句
【開発環境】
OS:Win10(64ビット)
データベース:SQLite3
コマンドプロンプト入力
【GROUP BY句を使ったグループ化】
GROUP BY句→抽出された行を、指定された列の値が同じ行ごとにグループ化するために使用される。
書式
SELECT カラム名, ... FROM テーブル名
GROUP BY カラム名1, カラム名2, ...;
例文
SQLite version 3.31.1 2020-01-27 19:55:54
Enter ".help" for usage hints.
sqlite> .tables
earn kantou product test user1
foods olduser staff user
テーブル削除
sqlite> DROP TABLE user;
sqlite>
テーブル作成
sqlite> create table user(name text, gender text, address text);
データ入力
sqlite> insert into user values('Honda', 'man', 'Tokyo');
sqlite> insert into user values('Ooshima', 'woman', 'Osaka');
sqlite> insert into user values('Shima', 'woman', 'Tokyo');
sqlite> insert into user values('Yamada', 'man', 'Nagoya');
sqlite> insert into user values('Fukushi', 'man', 'Fukuoka');
sqlite> insert into user values('Eda', 'woman', 'Osaka');
sqlite> insert into user values('Kiuchi', 'man', 'Tokyo');
sqlite>
sqlite> .header on
sqlite> .mode column
sqlite>
データ表示
sqlite> select * from user;
name gender address
---------- ---------- ----------
Honda man Tokyo
Ooshima woman Osaka
Shima woman Tokyo
Yamada man Nagoya
Fukushi man Fukuoka
Eda woman Osaka
Kiuchi man Tokyo
sqlite>
・GROUP BY 句を使い gender カラムでグループ化を行い、count 関数で行数を取得
sqlite> select gender, count(*) from user group by gender;
gender count(*)
---------- ----------
man 4
woman 3
sqlite>
・GROUP BY 句を使いaddressカラムでグループ化を行い、count 関数で行数を取得
sqlite> select address, count(*) from user group by address;
address count(*)
---------- ----------
Fukuoka 1
Nagoya 1
Osaka 2
Tokyo 3
・ gender カラムと address カラムでグループ化を行いデータの行数を取得
sqlite> select gender, address, count(*) from user group by gender, address;
gender address count(*)
---------- ---------- ----------
man Fukuoka 1
man Nagoya 1
man Tokyo 2
woman Osaka 2
woman Tokyo 1
sqlite>
HAVING句
グループ化された行に条件を指定するにはHAVING句を使用します。
書式
SELECT カラム名, ... FROM テーブル名
GROUP BY カラム名, ... HAVING 条件式;
実行
sqlite> select address, count(*) from user group by address having count(*) >= 2;
address count(*)
---------- ----------
Osaka 2
Tokyo 3
sqlite>
※コメント投稿者のブログIDはブログ作成者のみに通知されます