MySQL は GROUP BY グループ クエリを使用します

MySQL では、GROUP BY キーワードを使用して、1 つ以上のフィールドに基づいてクエリ結果をグループ化できます。

GROUP BY キーワードを使用するための構文は次のとおりです。

GROUP BY <フィールド名>

このうち、「フィールド名」は、グループ化する必要があるフィールドの名前を示し、複数のフィールドはカンマで区切ります。

GROUP BY を単独で使用

GROUP BY キーワードを単独で使用すると、クエリ結果には各グループの最初のレコードのみが表示されます。

例 1

以下は、tb_students_info テーブルの sex フィールドに基づくグループ クエリです。SQL ステートメントと実行結果は次のとおりです。

mysql> SELECT `name`,`sex` FROM tb_students_info 
    -> GROUP BY sex;
+-------+------+
| name  | sex  |
+-------+------+
| Henry | 女   |
| Dany  | 男   |
+-------+------+
2 rows in set (0.01 sec)

結果には2つのレコードのみが表示され、この2つのレコードの性別フィールドの値はそれぞれ「女性」と「男性」です。

GROUP BY と GROUP_CONCAT() 

GROUP BY キーワードは、GROUP_CONCAT() 関数で使用できます。GROUP_CONCAT() 関数は、各グループのフィールド値を表示します。

例 2

次に、tb_students_info テーブルの sex フィールドに基づいてグループ クエリを実行し、GROUP_CONCAT() 関数を使用して各グループの name フィールドの値を表示します。SQL ステートメントと実行結果は次のとおりです。

mysql> SELECT `sex`, GROUP_CONCAT(name) FROM tb_students_info 
    -> GROUP BY sex;
+------+----------------------------+
| sex  | GROUP_CONCAT(name)         |
+------+----------------------------+
| 女   | Henry,Jim,John,Thomas,Tom  |
| 男   | Dany,Green,Jane,Lily,Susan |
+------+----------------------------+
2 rows in set (0.00 sec)

結果からわかるように、クエリ結果は 2 つのグループに分けられ、sex フィールドの値が「female」であるグループ、値が「male」であるグループで、各グループの学生の名前が表示されていることがわかります。

例 3

以下は、tb_students_info テーブルの age フィールドと sex フィールドに基づくグループ クエリです。SQL ステートメントと実行結果は次のとおりです。

mysql> SELECT age,sex,GROUP_CONCAT(name) FROM tb_students_info 
    -> GROUP BY age,sex;
+------+------+--------------------+
| age  | sex  | GROUP_CONCAT(name) |
+------+------+--------------------+
|   21 | 女   | John               |
|   22 | 女   | Thomas             |
|   22 | 男   | Jane,Lily          |
|   23 | 女   | Henry,Tom          |
|   23 | 男   | Green,Susan        |
|   24 | 女   | Jim                |
|   25 | 男   | Dany               |
+------+------+--------------------+
7 rows in set (0.00 sec)

上記の例では、グループ化処理では、最初に年齢フィールドがグループ化され、年齢フィールドの値が等しい場合、年齢フィールドの値が同じレコードが性別フィールドに従ってグループ化されます。

複数のフィールドをグループ化してクエリを実行すると、最初のフィールドが最初にグループ化されます。最初のフィールドに同一の値がある場合、MySQL は 2 番目のフィールドでのみグループ化します。最初のフィールドのデータが一意である場合、MySQL は 2 番目のフィールドでグループ化されなくなります。

GROUP BY と集計関数

データ統計では、GROUP BY キーワードは集計関数と一緒に使用されることがよくあります。

集計関数には、COUNT()、SUM()、AVG()、MAX()、および MIN() が含まれます。このうち、COUNT() はレコード数のカウントに使用され、SUM() はフィールド値の合計の計算に使用され、AVG() はフィールド値の平均値の計算に使用され、MAX() はクエリに使用されます。フィールドの最大値; MIN() フィールドの最小値を照会するために使用されます。

例 4

次に、tb_students_info テーブルの sex フィールドに基づいてグループ クエリを実行し、COUNT() 関数を使用して各グループのレコード数を計算します。SQL ステートメントと実行結果は次のとおりです。

mysql> SELECT sex,COUNT(sex) FROM tb_students_info 
    -> GROUP BY sex;
+------+------------+
| sex  | COUNT(sex) |
+------+------------+
| 女   |          5 |
| 男   |          5 |
+------+------------+
2 rows in set (0.00 sec)

その結果、sex フィールドの値が「female」のレコードは 5 レコードのグループであり、sex フィールドの値が「male」のレコードは 5 レコードのグループであることがわかります。

GROUP BY と WITH ROLLUP

WITH POLLUP キーワードは、すべてのレコードの最後にレコードを追加するために使用されます.このレコードは、上記のすべてのレコードの合計、つまり統計レコードの数です.

例 5

以下は、tb_students_info テーブルの sex フィールドに基づくグループ クエリで、WITH ROLLUP を使用してレコードの合計を表示します。

mysql> SELECT sex,GROUP_CONCAT(name) FROM tb_students_info 
    ->GROUP BY sex WITH ROLLUP;
+------+------------------------------------------------------+
| sex  | GROUP_CONCAT(name)                                   |
+------+------------------------------------------------------+
| 女   | Henry,Jim,John,Thomas,Tom                            |
| 男   | Dany,Green,Jane,Lily,Susan                           |
| NULL | Henry,Jim,John,Thomas,Tom,Dany,Green,Jane,Lily,Susan |
+------+------------------------------------------------------+
3 rows in set (0.00 sec)

クエリ結果は、GROUP_CONCAT(name) が各グループの名前フィールドの値を示していることを示しています。同時に、最後のレコードの GROUP_CONCAT(name) フィールドの値は、上記のグループ名フィールドの値の合計になります。

ダーク ホース プログラマー MySQL データベース エントリから習熟まで、mysql のインストールから高度な mysql まで、mysql の最適化をすべて網羅

おすすめ

転載: blog.csdn.net/Itmastergo/article/details/130379382
おすすめ