web-dev-qa-db-ja.com

複数の列でgroup byを使う

私は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学期」に当てはまるデータはありません)

うまくいけば、それは理にかなっています。

1865
Smashery

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(*)はテーブル内の行数を返します

20
S. Mayol