Sql 简明教程
SQL - Group By Clause
The SQL GROUP BY Clause
SQL GROUP BY 子句与 SELECT 语句结合使用,将相同的数据整理到各组中。此子句在 SELECT 语句中紧跟 WHERE 子句,并先于 ORDER BY 和 HAVING 子句(如果存在的话)。
对基于特定列对表中的记录进行分组的主要目的是针对这些组执行计算。因此,GROUP BY 子句通常与聚合函数(如 SUM()、COUNT()、AVG()、MAX() 或 MIN() 等)一起使用。
例如,如果您有一个名为 SALES_DATA 的表,其中包含具有 YEAR、PRODUCT 和 SALES 列的销售数据。为了计算一整年的总销售额,GROUP BY 子句可用于基于年份对该表中的记录进行分组,并使用 SUM() 函数计算每组中的销售总额。
GROUP BY Clause with Aggregate Functions
通常,我们会对表的记录进行分组以便对它们执行计算。因此,SQL GROUP BY 子句通常与聚合函数(如 SUM()、AVG()、MIN()、MAX()、COUNT() 等)一起使用。
Example
假设我们创建了一个名为 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 语句向该表中插入值,如下所示:
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);
创建的表如下所示:
ID |
NAME |
AGE |
ADDRESS |
SALARY |
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 |
以下 SQL 查询基于 AGE 对 CUSTOMERS 表进行分组,并统计每组中的记录数:
SELECT AGE, COUNT(Name) FROM CUSTOMERS GROUP BY AGE;
GROUP BY Clause on Single Columns
当我们将 GROUP BY 子句与单个列一起使用时,表中所有在特定列中具有相同值的列都将合并为单个记录。
GROUP BY Clause with Multiple Columns
当我们将 GROUP BY 子句与多列一起使用时,表中在所有指定列中具有相同值的所有行都将合并到单个组中。
GROUP BY with ORDER BY Clause
在 SQL 中,我们可以将 ORDER BY 子句与 GROUP BY 结合使用,按一列或多列对分组数据进行排序。
Syntax
以下是 SQL 中 ORDER BY 子句与 GROUP BY 子句一起使用的语法:
SELECT column1, column2, ..., aggregate_function(columnX) AS alias
FROM table
GROUP BY column1, column2, ...
ORDER BY column1 [ASC | DESC], column2 [ASC | DESC], ...;
GROUP BY with HAVING Clause
我们还可以将 GROUP BY 子句与 HAVING 子句结合使用,基于特定条件过滤表中分组的数据。
Syntax
以下是 SQL 中 ORDER BY 子句与 HAVING 子句一起使用的语法:
SELECT column1, column2, aggregate_function(column)
FROM table_name
GROUP BY column1, column2
HAVING condition;