職案人

求職・歴史・仏教などについて掲載するつもりだが、自分の思いつきが多いブログだよ。適当に付き合って下さい。

SQLiteのGROUP BY句, HAVING句

2020年07月14日 | sqlite
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>

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« sqliteのCASE 句 | トップ | テーブルの結合--内部結合 »
最新の画像もっと見る

コメントを投稿

sqlite」カテゴリの最新記事