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 BY
1 つの列ではなく 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 |
テーブル内のレコードが少ないため、合計列のあらゆる場所に単位が表示されます。ちなみに、グループ化する列の数が増えるほど、結果に含まれる行も多くなることに注意してください。
GO TO FULL VERSION