Webサイト制作コースのお申し込みはこちら Webサイト制作コースのお申し込みはこちら

「GROUP BY句」を使えば、指定したカラムの値を基準にしたデータをグループ化できます。

データの平均値を求めたりCOUNTを使ったクエリを構築する場合に非常に便利で、SQLでは使用頻度の高いクエリです。

そこで今回はこの「GROUP BY句」について解説してみたいと思います。

GROUP BY句とは

冒頭でも述べたように、「GROUP BY」はグループ化を行うための命令句です。

よく使われるケースとしては、カラム毎の集計結果の表示などでしょうか。

このGROUP BY句ですが、単体で使うことはほとんどありません。

最も基本的なものであればCOUNT句と一緒に使用したりします。

例えば次のテーブルを見てください。

Name                                               Color           StandardCost          Size  SellStartDate
-------------------------------------------------- --------------- --------------------- ----- -----------------------
HL Road Frame - Black, 58                          Black                       1059.3100 58    2002-06-01 00:00:00.000
HL Road Frame - Red, 58                            Red                         1059.3100 58    2002-06-01 00:00:00.000
Sport-100 Helmet, Red                              Red                           13.0863 NULL  2005-07-01 00:00:00.000
Sport-100 Helmet, Black                            Black                         13.0863 NULL  2005-07-01 00:00:00.000
Mountain Bike Socks, M                             White                          3.3963 M     2005-07-01 00:00:00.000
Mountain Bike Socks, L                             White                          3.3963 L     2005-07-01 00:00:00.000
Sport-100 Helmet, Blue                             Blue                          13.0863 NULL  2005-07-01 00:00:00.000
AWC Logo Cap                                       Multi                          6.9223 NULL  2005-07-01 00:00:00.000
Long-Sleeve Logo Jersey, S                         Multi                         38.4923 S     2005-07-01 00:00:00.000
Long-Sleeve Logo Jersey, M                         Multi                         38.4923 M     2005-07-01 00:00:00.000

このテーブルの中で「Color」を基準に個数をカウントしたい場合があったとします。

この場合には「COUNT」と「GROUP BY」を同時に使用することで色毎のカウントが成立します。

SELECT Color, COUNT(Color) FROM Product GROUP BY Color;
GO

Color
--------------- -----------
Black                     2
Blue                      1
Multi                     3
Red                       2
White                     2

今はまだこういった形で使うということだけを漠然と理解していただくだけで大丈夫です。

これから具体的な使い方を解説していきたいと思います。

GROUP BY句の使い方

それでは早速、GROUP BY句の使い方について見ていきましょう。

基本的な記述は次のように行います。

SELECT
	col_name1 [, col_name2 ...]
FROM
	table_name
GROUP BY
	col_name, ...

基本的にGROUP BYまでは通常のSELECT文ですので気にする必要はありません。

問題はGROUP BYの後ですが、こちらも普通にカラム名を指定するだけなので特に難しく考える必要はないと思います。

GROUP BYでグループ化されたSELECT文のデータはグループの数だけ表示されます。

よってGROUP BY句を使う際には何の数字なのかわかりやすくするため、COUNT句と一緒に基となるカラム名を表示することが基本となります。

次のコードを見てください。

SELECT COUNT(Color) FROM Product GROUP BY Color;
GO

-----------
          0
         89
         26
          1
          8
         38
         36
          7
          4
         36

このコードはProductテーブルの中からColorを基準にGROUP BYで区分けしたものですが、これを見て何のことかわかる人はいませんよね。

こういったことが起きないように必ず基準としたカラムを一緒に添える必要があるわけです。

WHERE/HAVINGで条件を絞る

COUNT句以外にも条件を絞りつつGROUP BYを使う時に使われるのがWHERE句とHAVING句です。

この二つには若干の違いがあるため、まずはこの二つの違いについて解説します。

WHERE句

WHERE句はGROUP BY句を実行する前に条件を適用する場合に使用します。

分かりやすく言うと、集計したいカラムから特定のレコードをはじく場合などです。

SELECT TOP 20 * FROM Product
GO

Name                                               Color           StandardCost          Size  SellStartDate
-------------------------------------------------- --------------- --------------------- ----- -----------------------
HL Road Frame - Black, 58                          Black                       1059.3100 58    2002-06-01 00:00:00.000
HL Road Frame - Red, 58                            Red                         1059.3100 58    2002-06-01 00:00:00.000
Sport-100 Helmet, Red                              Red                           13.0863 NULL  2005-07-01 00:00:00.000
Sport-100 Helmet, Black                            Black                         13.0863 NULL  2005-07-01 00:00:00.000
Mountain Bike Socks, M                             White                          3.3963 M     2005-07-01 00:00:00.000
Mountain Bike Socks, L                             White                          3.3963 L     2005-07-01 00:00:00.000
Sport-100 Helmet, Blue                             Blue                          13.0863 NULL  2005-07-01 00:00:00.000
AWC Logo Cap                                       Multi                          6.9223 NULL  2005-07-01 00:00:00.000
Long-Sleeve Logo Jersey, S                         Multi                         38.4923 S     2005-07-01 00:00:00.000
Long-Sleeve Logo Jersey, M                         Multi                         38.4923 M     2005-07-01 00:00:00.000
Long-Sleeve Logo Jersey, L                         Multi                         38.4923 L     2005-07-01 00:00:00.000
Long-Sleeve Logo Jersey, XL                        Multi                         38.4923 XL    2005-07-01 00:00:00.000
HL Road Frame - Red, 62                            Red                          868.6342 62    2005-07-01 00:00:00.000
HL Road Frame - Red, 44                            Red                          868.6342 44    2005-07-01 00:00:00.000
HL Road Frame - Red, 48                            Red                          868.6342 48    2005-07-01 00:00:00.000
HL Road Frame - Red, 52                            Red                          868.6342 52    2005-07-01 00:00:00.000
HL Road Frame - Red, 56                            Red                          868.6342 56    2005-07-01 00:00:00.000
LL Road Frame - Black, 58                          Black                        204.6251 58    2005-07-01 00:00:00.000
LL Road Frame - Black, 60                          Black                        204.6251 60    2005-07-01 00:00:00.000
LL Road Frame - Black, 62                          Black                        204.6251 62    2005-07-01 00:00:00.000

SELECT
	Color, COUNT(Color) AS colorNum
FROM (
	SELECT
		 TOP 20 Color
	FROM
		Product
) AS COLOR
WHERE
	COLOR.Color != 'Black'
GROUP BY
	COLOR.Color

Color           colorNum
--------------- -----------
Blue                      1
Multi                     5
Red                       7
White                     2

HAVING句

HAVING句はGROUP BY句を実行後にHAVINNG句で指定した条件を実行します。

例えば、テーブルから色毎に数を集計し、その集計結果から特定の色の数のみ表示させるといった場合などです。

二つの違い

この二つについての違いは実行のタイミングのみなので、「WHEREは先でHAVINGは後」とだけ覚えておけば良いでしょう。

まとめ

いかがでしたか?

今回はSQLでのグループ化ということで「GROUP BY句」について解説してみました。

グループ化は非常によく使う命令なので、初心者の方はこの記事をよく読んで仕組みを正しく理解しておくとこの先の学習においてもグッと楽になると思います。

しっかりマスターしておきましょう!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。