サーチ…


構文

  1. SELECT expression1、expression2、... expression_n、
  2. aggregate_function(expression)
  3. FROMテーブル
  4. [WHERE条件]
  5. GROUP BY expression1、expression2、... expression_n;

パラメーター

パラメータ詳細
式1、式2、...式_n 集合関数内にカプセル化されていない式で、GROUP BY句に含める必要があります。
集合関数 SUM、COUNT、MIN、MAX、またはAVG関数などの関数。
テーブルあなたがレコードを取得したいテーブル。 FROM句には少なくとも1つのテーブルがリストされている必要があります。
WHERE条件オプション。レコードを選択するために満たす必要がある条件。

備考

MySQL GROUP BY句は、SELECT文で複数のレコード間でデータを収集し、結果を1つ以上の列でグループ化するために使用されます。

その振る舞いはONLY_FULL_GROUP_BY変数の値によって部分的に制御されます 。これを有効にすると、出力に含まれない列でグループ化されたSELECT文がエラーを返します。 これは5.7.5以降のデフォルトです 。この変数を設定したり設定したりしないと、他のDBMSに慣れ親しんだユーザーやユーザーにとって問題が発生する可能性があります。

GROUP BY USING SUM関数

SELECT product, SUM(quantity) AS "Total quantity"
FROM order_details
GROUP BY product;

MIN機能を使用してグループ化する

各行がnamedepartmentsalaryを持つ従業員である従業員のテーブルを想定します。

SELECT department, MIN(salary) AS "Lowest salary"
FROM employees
GROUP BY department;

これは、どの部門に最低給与の従業員が含まれているか、その給与は何かを示します。各部門で最低給与の従業員のnameを見つけることは、この例の範囲外の別の問題です。 「groupwise max」を参照してください。

GROUP BY USING COUNT関数

SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department;

HAVINGを使用してGROUP BY

SELECT department, COUNT(*) AS "Man_Power"
FROM employees
GROUP BY department
HAVING COUNT(*) >= 10;

GROUP BY ... HAVINGを使用する集約レコードをフィルタリングすることは、 SELECT ... WHEREを使用して個々のレコードをフィルタリングすることに似ています。

HAVINGが "エイリアス"を理解しているので、 HAVING HAVING Man_Power >= 10と言うこともできます。

Group Concatを使用してグループ化する

Group Concatは、MySQLで使用され、列ごとに複数の結果を持つ式の連結値を取得します。つまり、 Name(1):Score(*)などの1つの列に対して選択される行が多数ありますName(1):Score(*)

スコア
アダム A +
アダム A-
アダム B
アダム C +
ビル D-
ジョン A-
SELECT Name, GROUP_CONCAT(Score ORDER BY Score desc SEPERATOR ' ') AS Grades
FROM   Grade
GROUP BY Name

結果:

+------+------------+ 
| Name | Grades     | 
+------+------------+ 
| Adam | C+ B A- A+ | 
| Bill | D-         | 
| John | A-         | 
+------+------------+ 

AGGREGATE機能を持つGROUP BY

テーブルオーダー

+---------+------------+----------+-------+--------+
| orderid | customerid | customer | total | items  |
+---------+------------+----------+-------+--------+
|       1 |          1 | Bob      |  1300 |     10 |
|       2 |          3 | Fred     |   500 |      2 |
|       3 |          5 | Tess     |  2500 |      8 |
|       4 |          1 | Bob      |   300 |      6 |
|       5 |          2 | Carly    |   800 |      3 |
|       6 |          2 | Carly    |  1000 |     12 |
|       7 |          3 | Fred     |   100 |      1 |
|       8 |          5 | Tess     | 11500 |     50 |
|       9 |          4 | Jenny    |   200 |      2 |
|      10 |          1 | Bob      |   500 |     15 |
+---------+------------+----------+-------+--------+
  • カウント

WHERE句で特定の条件を満たす行数を返します。

例:各顧客の注文数。

SELECT customer, COUNT(*) as orders
FROM orders
GROUP BY customer
ORDER BY customer

結果:

+----------+--------+
| customer | orders |
+----------+--------+
| Bob      |      3 |
| Carly    |      2 |
| Fred     |      2 |
| Jenny    |      1 |
| Tess     |      2 |
+----------+--------+

選択した列の合計を返します。

例:合計と各顧客のアイテムの合計。

SELECT customer, SUM(total) as sum_total, SUM(items) as sum_items
FROM orders
GROUP BY customer
ORDER BY customer

結果:

+----------+-----------+-----------+
| customer | sum_total | sum_items |
+----------+-----------+-----------+
| Bob      |      2100 |        31 |
| Carly    |      1800 |        15 |
| Fred     |       600 |         3 |
| Jenny    |       200 |         2 |
| Tess     |     14000 |        58 |
+----------+-----------+-----------+
  • AVG

数値の列の平均値を返します。

例:各顧客の平均注文額

SELECT customer, AVG(total) as avg_total
FROM orders
GROUP BY customer
ORDER BY customer

結果:

+----------+-----------+
| customer | avg_total |
+----------+-----------+
| Bob      |       700 |
| Carly    |       900 |
| Fred     |       300 |
| Jenny    |       200 |
| Tess     |      7000 |
+----------+-----------+
  • MAX

特定の列または式の最大値を返します。

例:各顧客の最高注文合計。

SELECT customer, MAX(total) as max_total
FROM orders
GROUP BY customer
ORDER BY customer

結果:

+----------+-----------+
| customer | max_total |
+----------+-----------+
| Bob      |      1300 |
| Carly    |      1000 |
| Fred     |       500 |
| Jenny    |       200 |
| Tess     |     11500 |
+----------+-----------+
  • MIN

特定の列または式の最小値を返します。

例:各顧客の最安値合計。

SELECT customer, MIN(total) as min_total
FROM orders
GROUP BY customer
ORDER BY customer

結果:

+----------+-----------+
| customer | min_total |
+----------+-----------+
| Bob      |       300 |
| Carly    |       800 |
| Fred     |       100 |
| Jenny    |       200 |
| Tess     |      2500 |
+----------+-----------+


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow