MySQL Group By

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 Using a Single Column 2

MySQL Group By Sum 示例

在此示例中,我们使用 Sum 函数计算每个职业的总收入和总销售额。请参阅聚合函数文章。

SELECT Occupation,
       SUM(Income),
       SUM(Sales)
 FROM customer
 GROUP BY Occupation;
GROUP BY Sum 3

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;
Group By AVG

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 Variance 9

Group By 多列

在此示例中,我们将使用多列。首先,它按每个职业和资格对行进行分组。接下来,此查询查找每个集合的收入总计和销售总计。

SELECT Occupation,
       Qualification,
       SUM(Income),
       SUM(Sales)
 FROM customer
 GROUP BY Occupation, Qualification;
GROUP BY Multiple Columns 10

从上面可以看出,尽管我们按职业对结果进行了分类,但列值是重复的。这是因为我们使用了职业和资格列。

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 Where 11

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 Order By 12

Group By 聚合函数

在此示例中,我们在命令提示符中使用所有函数。

SELECT Qualification, Occupation, 
SUM(Income),
AVG(Income),
MIN(Income),
MAX(Income),
STD(Income),
VARIANCE(Income)
FROM customer
GROUP BY Qualification, Occupation;
GROUP BY Clause Aggregate Functions Example 13