分组(GROUP BY)

Exisi 2023-02-16 11:30:13
Categories: Tags:
  • GROUP BY 子句用来根据指定的字段对结果集(选取的数据)进行分组,如果某些记录的指定字段具有相同的值,那么它们将被合并为一条数据。通俗地理解,GROUP BY 子句将根据指定的字段合并数据行

语法

SELECT select_expr [, select_expr] ...

FROM table_references  [PARTITION partition_list]

WHERE where_condition

GROUP BY {col_name | expr | position}, ... [WITH ROLLUP];

 

参数

说明

select_expr

包含选择列表,该列表指示要检索的列。指定列或表达式,或者可以使用 *

必须至少有一个select_expr

[FROM table_references

[PARTITION

partition_name[partition_name]

]

]

指定语句作用到的数据表名

参数

描述

table_references

数据表名

[PARTITION

partition_name

[partition_name]

]

SELECT 支持使用 PARTITION 子句的显式分区选择,其中包含分区或子分区(或两者)列表,跟在 table_reference 中的表名之后。在这种情况下,仅从列出的分区中选择行,而忽略表的任何其他分区

属性

描述

partition_name

要使用的分区或子分区的逗号分隔列表。此列表中的每个名称必须是指定表的现有分区或子分区的名称;如果未找到任何分区或子分区,则语句将失败并返回错误(分区'partition_name'不存在)。partition_names中命名的分区和子分区可以按任何顺序列出,并且可能重叠

 

 

[WHERE where_condition]

WHERE子句(如果给定)指示行必须满足的条件才能被选择。

如果没有WHERE子句,语句将选择所有行

参数

描述

where_condition

其中condition是一个表达式,对于要选择的每一行,其计算结果为true

 

GROUP BY {col_name | expr | position}, ...

[WITH ROLLUP]

使用GROUPBY时对任意列进行排序,可以使用列名、列别名或列位置在ORDER BYGROUP BY子句中引用为输出选择的列。列位置为整数,以1开头:

参数

描述

col_name

数据列名

expr

数据列别名

position

数据列索引

[WITH ROLLUP]

WITH ROLLUP修饰符添加到GROUP BY子句会导致查询生成另一个(超级聚合)行,添加了ROLLUP后,查询将生成多行

 

示例

mysql> SELECT country, SUM(visitors) AS total

    -> FROM website

    -> GROUP BY country;

 

运行结果如下:

+----------+-------------------------+

| country | total                           |

+----------+-------------------------+

| CN        |  9018.869999885559 |

| RU        | 1797.8200073242188 |

| US        |  37282.50001525879 |

+----------+-------------------------+