MySQL GROUP BY 子句通过按一个或多个列分组来返回聚合数据(值)。它首先对列进行分组,然后对剩余的列应用聚合函数。要显示高级别或聚合信息,您必须使用此 Group by 子句。
例如,要按大洲或区域查找总销售额,请使用 Group By 子句将国家名称按大洲或区域分组。接下来,使用聚合 SUM 函数计算总计。
MySQL GROUP BY 子句语法
语法可以这样写:
SELECT [Column1],...[ColumnN],
Aggregate_Function(Column_Name)
FROM [Source]
WHERE [Conditions] -- Optional
GROUP BY [Column1],...[ColumnN]
ORDER BY Columns
- 列1…N:从表(或表)中选择列。
- 聚合函数:使用任何聚合函数。COUNT、SUM、AVG、AVG、MIN、MAX、STD 和 VARIANCE 是我们可以使用的函数。
- Group By:未包含在聚合函数中的列必须放在其后。
为了演示此 MySQL Group By 子句如何汇总行数据,我们将使用下面显示的数据。

MySQL Group By 单列计数
在此示例中,我们在 Group By 子句和 Count 函数中使用了单列。以下 MySQL 查询计算每个职业部分中的员工 ID 数量。
SELECT Occupation,
COUNT(EmpID)
FROM customer
GROUP BY Occupation;

MySQL Group By Sum 示例
在此示例中,我们使用 Sum 函数计算每个职业的总收入和总销售额。请参阅聚合函数文章。
SELECT Occupation,
SUM(Income),
SUM(Sales)
FROM customer
GROUP BY Occupation;

Group By Distinct Sum 示例
这次,我们正在将 Distinct 关键字与 Sum 函数一起使用。以下 Distinct 查询查找每个职业类别中不同收入的总和以及不同销售额的总和。
SELECT Occupation,
SUM(DISTINCT Income),
SUM(DISTINCT Sales)
FROM customer
GROUP BY Occupation;

Group By Avg 示例
在这里,我们与 AVG 函数一起使用,以查找每个职业的收入平均值和销售平均值。
SELECT Occupation,
AVG(Income),
AVG(Sales)
FROM customer
GROUP BY Occupation;

MySQL Group By Min 和 Max 函数
在此示例中,我们使用 Min 函数查找每个职业类别的最低收入和最低销售额。
SELECT Occupation,
MIN(Income),
MIN(Sales)
FROM customer
GROUP BY Occupation;

在这里,我们使用 Max 函数查找每个职业部分的最高收入和最高销售额。
SELECT Occupation,
MAX(Income),
MAX(Sales)
FROM customer
GROUP BY Occupation;

STD、STDDEV、STDDEV_POP 和 STDDEV_SAMP 函数
在此示例中,我们将使用 STD、STDDEV、STDDEV_POP 和 STDDEV_SAMP 函数以及 Group By 来计算每个职业的标准差。
SELECT Occupation,
STD(Income),
STDDEV(Income),
STDDEV_POP(Income),
STDDEV_SAMP(Income)
FROM customer
GROUP BY Occupation;

Group By Variance、VAR_POP 和 VAR_SAMP 示例
在这里,我们将其与 Variance、VAR_POP 和 VAR_SAMP 函数一起使用,以计算每个职业集中的方差。
SELECT Occupation,
VARIANCE(Income),
VAR_POP(Income),
VAR_SAMP(Income)
FROM customer
GROUP BY Occupation;

Group By 多列
在此示例中,我们将使用多列。首先,它按每个职业和资格对行进行分组。接下来,此查询查找每个集合的收入总计和销售总计。
SELECT Occupation,
Qualification,
SUM(Income),
SUM(Sales)
FROM customer
GROUP BY Occupation, Qualification;

从上面可以看出,尽管我们按职业对结果进行了分类,但列值是重复的。这是因为我们使用了职业和资格列。
MySQL Group By Where 子句
除此之外,您还可以使用 Where 子句来限制查询选择的记录。我们也可以使用 Order By。
SELECT Occupation,
Qualification,
SUM(Income),
SUM(Sales)
FROM customer
WHERE Occupation <> 'Clerical'
GROUP BY Occupation, Qualification;

Group By Order By 示例
我们也可以将 Group By 与 Order By 一起使用。在这里,结果集按每个类别的总收入降序排序。
SELECT Occupation,
Qualification,
SUM(Income),
SUM(Sales)
FROM customer
GROUP BY Occupation, Qualification
ORDER BY SUM(Income) DESC;

Group By 聚合函数
在此示例中,我们在命令提示符中使用所有函数。
SELECT Qualification, Occupation,
SUM(Income),
AVG(Income),
MIN(Income),
MAX(Income),
STD(Income),
VARIANCE(Income)
FROM customer
GROUP BY Qualification, Occupation;
