4.1 列のグループ化

また、非常に重要なことは、レコードをグループ化する場合、セクションではSELECTデータをグループ化する列のみを指定できることです。

あなたできない型クエリを作成し、セクションに名前SELECT列を指定します。

SELECT brand, name
FROM product
GROUP BY brand

productテーブルに名前field を持つ行が多数ありますが、ここでどの行を置き換える必要があるかが明確ではありません。もう一度考えてみましょう。各ブランドの製品の数と、結果のテーブルから製品の名前をどのように取得できるかを知りたいと考えていますか?

演算子 を使用するとGROUP BY、通常の行は結果に含まれませんが、データがグループ化される列と「計算列」のみが結果に含まれます。COUNT(*)

4.2 計算列によるグループ化

ただし、複数の列や計算列ごとにグループ化することもできます。例:

SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year

そして、このクエリの結果は次のようになります。

雇用年数 合計
2012年 1
2013年 1
2014年 1
2015年 2
2018年 1

リクエストを分析してみましょう。

従業員テーブルでは、各従業員には一意の雇用日があるため、それによってデータをグループ化することはできません。日付ごとに 1 つのレコードが存在し、グループ化にはあまり意味がありません。しかし、採用日から採用年に移動すると、会社が同じ年に複数の従業員を雇用した状況になる可能性があります。

グループ化する前にこのテーブルがどのようになるかをもう一度見てみましょう。

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	join_date
FROM employee

そして、このクエリの結果は次のようになります。

ID 名前 雇用年数 参加日
1 イワノフ・イワン 2012年 2012-06-30
2 ペトロフ・ペトル 2013年 2013-08-12
3 イワノフ・セルゲイ 2014年 2014-01-01
4 ラビノビッチ・モイシャ 2015年 2015-05-12
5 キリエンコ・アナスタシア 2015年 2015-10-10
6 バスカ 2018年 2018-11-11

ただし、この結果のテーブルは、hire_yearごとにグループ化して、特定の年に何人が雇用されたかを知ることができます。

4.3 複数の列によるグループ化

次に、各年の各月に雇用した従業員の数を調べてみましょう。これを行うには、1 つではなく 2 つの計算フィールド (雇用年 (hire_year) と雇用月 (hire_month)) を一度にクエリに追加する必要があります。

次のようなクエリを書いてみましょう。

SELECT
 	id,
 	name,
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	join_date
FROM employee

そして、このクエリの結果は次のようになります。

ID 名前 雇用年数 雇用_月 参加日
1 イワノフ・イワン 2012年 6 2012-06-30
2 ペトロフ・ペトル 2013年 8 2013-08-12
3 イワノフ・セルゲイ 2014年 1 2014-01-01
4 ラビノビッチ・モイシャ 2015年 5 2015-05-12
5 キリエンコ・アナスタシア 2015年 10 2015-10-10
6 バスカ 2018年 十一 2018-11-11

この結果テーブルのデータを月ごとにグループ化すると、雇用された年に関係なく、単純に人々をグループに分類することになります。そして、結果として得られるテーブルには、年、月、雇用された従業員数の 3 つの列が必要です。

これを行うには、演算子の後に、GROUP BY1 つの列ではなく 2 つの列の名前を使用する必要があります。例:

SELECT
 	YEAR(join_date) AS hire_year,
 	MONTH(join_date) AS hire_month,
 	COUNT(*) AS total
FROM employee
GROUP BY hire_year, hire_month

そして、このクエリの結果は次のようになります。

雇用年数 雇用_月 合計
2012年 6 1
2013年 8 1
2014年 1 1
2015年 5 1
2015年 10 1
2018年 十一 1

テーブル内のレコードが少ないため、合計列のあらゆる場所に単位が表示されます。ちなみに、グループ化する列の数が増えるほど、結果に含まれる行も多くなることに注意してください。