私はGROUP BY x
の意味を理解しています
しかし、GROUP BY x, y
はどのように機能し、それはどういう意味ですか?
Group By X
は、1つのグループのXに同じ値を持つすべてのものを置くを意味します。
Group By X, Y
は、1つのグループのXとYの両方に同じ値を持つものをすべて置くを意味します。
例を使用して説明するために、次の表があり、誰が大学のどの科目に参加しているのかを示します。
Table: Subject_Selection
Subject Semester Attendee
---------------------------------
ITB001 1 John
ITB001 1 Bob
ITB001 1 Mickey
ITB001 2 Jenny
ITB001 2 James
MKB114 1 John
MKB114 1 Erica
サブジェクト列でのみgroup by
を使用する場合。いう:
select Subject, Count(*)
from Subject_Selection
group by Subject
次のようなものが得られます:
Subject Count
------------------------------
ITB001 5
MKB114 2
... ITB001には5つのエントリがあり、MKB114には2つのエントリがあるため
group by
2列にする場合:
select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester
これを取得します:
Subject Semester Count
------------------------------
ITB001 1 3
ITB001 2 2
MKB114 1 2
これは、2つの列でグループ化する場合、"同じ科目と学期を持つすべての人が同じグループになるようにグループ化し、すべての集計関数を計算する(カウント、合計、平均など)それらのグループごとに。この例では、これをカウントすると、セメスター1でITB001を実行しているthreeがあり、セメスター2でtwoを実行していることがあります。 MKB114を実行している人の1学期は1学期であるため、2学期の行はありません(グループ「MKB114、2学期」に当てはまるデータはありません)
うまくいけば、それは理にかなっています。
GROUP BY
句は、1つ以上の列で結果セットをグループ化するために集約関数と組み合わせて使用されます。例えば。:
SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;
この順番を覚えておいてください:
1)SELECT(データベースからデータを選択するために使用されます)
2)FROM(文節は表をリストするために使用されます)
3)WHERE(句はレコードのフィルタリングに使用されます)
4)GROUP BY(節をSELECTステートメントで使用して、複数のレコードにわたってデータを収集し、結果を1つ以上の列でグループ化することができます)
5)HAVING(GROUP BY句と組み合わせて、返される行のグループを、条件がTRUEである行のみに制限する)
6)ORDER BY(キーワードを使用して結果セットをソートします)
集約関数を使用している場合は、これらすべてを使用できます。これが、設定する必要がある順序です。それ以外の場合は、エラーになる可能性があります。
集約関数は以下のとおりです。
MINは与えられた列の最小値を返します
SUMは与えられた列の数値の合計を返します
AVGは与えられた列の平均値を返します
COUNTは与えられた列の値の総数を返します
COUNT(*)はテーブル内の行数を返します