複数の列でグループ化を使用する


1037

のポイントがわかります GROUP BY x

しかし、どのように機能しGROUP BY x, y、それはどういう意味ですか?


2
この質問がそれを提起するので、あなたはそれが記述されているのを見つけることができません。GROUP BY句は、1つ以上のフィールドを取ることができます。GROUP BY顧客; GROUP BY姓、名; GROUP BY年、店舗、SKUなど
Bill

回答:


2029

Group By XXの値が同じものをすべて1つのグループに入れることを意味します。

Group By X, YXとYの両方に同じ値を持つものをすべて1つのグループに入れることを意味します

例を使用して説明するために、大学のどの科目に誰が参加しているかについて、次の表があるとします。

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 by2列にした場合:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

私たちはこれを得るでしょう:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

これは、2つの列でグループ化すると、「同じ科目と学期を持つすべてのグループが同じグループになるようにグループ化し、すべての集計関数(カウント、合計、平均など)を計算するためです。 )「これらのグループのそれぞれについて。この例では、これをカウントすると、3名が1学期にITB001を行い、2名が2学期にITB001を行うため、MKB114を行う両方の人が1学期にいるため、セメスター2の行(グループ「MKB114、セメスター2」に該当するデータはありません)

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


11
@Smashery:つまり、これもGROUP BY A,B同じことGROUP BY B,Aですか?
tumchaaditya 2014

23
はい、そうです。それらが互いに同じくらい効率的であるかどうかははっきりとは言えませんが、同じ結果になります、はい。
Smashery 2014

2
ここに違いがあることを追加する必要があることGROUP BY a, bと、GROUP BY a AND b二番目だけのリストにグループ化まったく同じ内容を持つアイテムなし「undergroups」以来で。この場合、出力は最初の出力と同じになります。
Dwza 2015年

5
列ごとにグループ化する順序は重要ではないことを付け加えておきます。上記のセメスターによるグループの例では、Subjectは同じ結果を
返します

2
まあ、グループ化a、bとグループ化b、aは同じ結果を返しません-行は異なる順序で表示されます
ファニー

33

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


1
我々は2つの列を入れてくださいどこけど、2 /以上の列に基づいて集計する方法についての質問です
Chaitanya Bapat

こんにちは、チャイタンヤ。これがあなたの質問かどうかはわかりませんが、いくつか例を挙げましょう。この方法で集計関数を使用する商品テーブルがある場合、以下の2つのシナリオがあります。SELECT AVG(instock)FROM products; これにより、productsテーブルの在庫の平均単位が計算されます。ここで、製品カテゴリー別に在庫の単位を計算したいので、次のようにGROUP BY句を指定してAVG関数を使用する必要があります。SELECT categoryId、AVG(instock)FROM products
S. Mayol 2017年

これはリモートで質問に答えることすらできません...ここでの質問は、与えられた例で説明されているように、「主題」と「学期」の「連鎖グループ化」を同時に達成する方法です...
MahNas92
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.