例えば、あるデータから
「男性は何人?女性は何人?」と調べるときに便利なのが、GROUP BYです。
【使い方】
こんなデータがあるとします。(date)
番号 | 名前 | 性別 |
---|---|---|
1 | 佐藤 | 男性 |
2 | 鈴木 | 女性 |
3 | 田中 | 男性 |
このデータから性別ごとに何人いるかを調べたいとき
GROUP BYと前回学んだCOUNTを使います。
コードも書いてみると、
SELECT `性別`, COUNT(*) FROM data GROUP BY `性別` ;
実行結果
性別 | 人数 |
---|---|
男性 | 2 |
女性 | 1 |
なので性別, COUNT(*)とコードで書いていると実行結果もその順番になります
「GROUP BY 性別」 で性別ごとにグループ分けし、「COUNT(*)」でそれぞれ何人かをカウントしています。
続けて「GROUP BYで割合(%)を出す」方法を紹介します!
「全体のうち、男性は何%?女性は何%?」という割合を出したいときはどうすればよいでしょうか?
そのやり方をご紹介します!
【使い方】
番号 | 名前 | 性別 |
---|---|---|
1 | 佐藤 | 男性 |
2 | 鈴木 | 女性 |
3 | 田中 | 男性 |
さっきと同じデータを使います!
性別ごとの割合を出すSQLは↓
SELECT `性別`,
COUNT(*) AS 人数,
ROUND(COUNT(*) * 100.0 / (SELECT COUNT(*) FROM date), 1) AS 割合_%
FROM date
GROUP BY `性別` ;
【解説】
改行で見やすいように調整ができます!一文が長くなる時は見やすくなるようにキリのいいところで改行します。
・ROUND:四捨五入の関数です
使い方:ROUND(四捨五入する該当の数字, 数字)
今回は該当の数字のところに数式が来ていますね。後述で解説します!
数字は四捨五入する位置の調整です。1だと少数第一位までの表示ですね。
ROUNDの中の数式部分
COUNT(*) * 100.0 / (SELECT COUNT(*) FROM date)
・COUNT(*):性別ごとの人数
・(SELECT COUNT(*) FROM users):全体の人数
※クエリの中に()でクエリを書くことをサブクエリと言います。
サブクエリを書くことで一回目と異なり常に全体を示します
・AS:列にわかりやすい名前を付けます!
かなり便利なので実際のコードでも使います
実行結果イメージ
性別 | 人数 | 割合_% |
---|---|---|
男性 | 2 | 66.7 |
女性 | 1 | 33.3 |
【整数で表示したいときは?】
ROUNDで小数点の調整ができます!
ROUND(…, 0):整数での表示
ROUNDの” , “のあとの数字で決まります
0で小数第一位を四捨五入するので整数になります
逆に-1だと1の位を四捨五入するので10単位での表示ですね!
価格や大まかに見たいときに役立ちますね
【まとめ】
今日はGROUP BYについて学びました!!
GROUP BYは「分ける」、COUNTは「数える」。
この2つが分かれば、集計の幅が一気に広がりますね🐢
この2つはセットで使うことが多いです。
アンケート集計や商品カテゴリ別の在庫数チェックなど、実務で大活躍します。
コメント