Mysql 简明教程

MySQL - GROUP BY Clause

MySQL GROUP BY Clause

MySQL 中的 GROUP BY 子句用于将表中的相同数据按组排列。

例如,假设你有一个包含日期、产品和销售额的组织销售数据的表。若要计算某一特定年份的总销售额,则可使用 GROUP BY 子句对该年份生产的产品的销售额进行分组。类似地,你可以按日期对数据进行分组,以计算每个日期的总销售额,或按产品和日期的组合对数据进行分组,以计算每天每种产品的总销售额。

此 GROUP BY 子句紧跟 SQL 语句中的 WHERE 子句并位于 ORDER BY 或 HAVING 子句之前(如果它们存在)。你可以使用 GROUP BY 对列中的值进行分组,并且可以在需要时对该列执行计算。你可以在分组的列上使用 COUNT、SUM、AVG 等函数。

Syntax

以下是将 GROUP BY 与 SELECT 语句一起使用的基本语法 −

SELECT column_name(s) FROM table_name
GROUP BY [condition | column_name(s)];

Example

此示例演示如何使用带有 GROUP BY 子句的 aggregate functions

首先,使用以下 CREATE TABLE 查询创建名为 CUSTOMERS 的表 −

CREATE TABLE CUSTOMERS (
   ID INT NOT NULL,
   NAME VARCHAR (20) NOT NULL,
   AGE INT NOT NULL,
   ADDRESS CHAR (25),
   SALARY DECIMAL (18, 2),
   PRIMARY KEY (ID)
);

现在,使用以下 INSERT 语句将以下记录插入到 CUSTOMERS 表中 −

INSERT INTO CUSTOMERS VALUES
(1, 'Ramesh', 32, 'Ahmedabad', 2000.00),
(2, 'Khilan', 25, 'Delhi', 1500.00),
(3, 'Kaushik', 23, 'Kota', 2000.00),
(4, 'Chaitali', 25, 'Mumbai', 6500.00),
(5, 'Hardik', 27, 'Bhopal', 8500.00),
(6, 'Komal', 22, 'Hyderabad', 4500.00),
(7, 'Muffy', 24, 'Indore', 10000.00);

该表创建如下 −

现在,使用以下 GROUP BY 查询根据其年龄对客户进行分组 −

SELECT AGE, COUNT(Name) FROM CUSTOMERS GROUP BY AGE;

Output

以下是产生的结果:

MySQL GROUP BY on Single Column

当我们对单个列使用 GROUP BY 子句时,该列中的所有公共值将被加在一起,形成一条记录。

Example

在此示例中,让我们按客户的年龄对客户进行分组,并使用以下查询计算每个年龄的平均薪水 −

SELECT AGE, AVG(SALARY) AS AVG_SALARY
FROM CUSTOMERS
GROUP BY AGE;

Output

这将产生以下结果 -

AGE

AVG_SALARY

32

2000.000000

25

4000.000000

23

2000.000000

27

8500.000000

22

4500.000000

24

10000.000000