SQL GROUP BY 语句
SQL中的GROUP BY语句用于在一些函数的帮助下将相同的数据安排到组中。例如,如果一个特定的列在不同的行中有相同的值,那么它将把这些行安排在一个组中。
重要的几点:
- GROUP BY子句与SELECT语句一起使用。
- 在查询中,GROUP BY子句放在WHERE子句之后。
- 在查询中,如果使用ORDER BY子句,则将GROUP BY子句放在前面。
语法 :
SELECT column1, function_name(column2)
FROM table_name
WHERE condition
GROUP BY column1, column2
ORDER BY column1, column2;
function_name : 所使用的函数的名称,例如SUM(), AVG().
table_name : 表名.
condition : 使用条件.
示例表:
Employee
Student
示例:
- 按单列分组 :组单列是指将同一列的所有值相同的行放在一个组中。考虑下面的查询:
SELECT NAME, SUM(SALARY) FROM Employee
GROUP BY NAME;
上面的查询将产生以下输出:
在上面的输出中可以看到,具有重复名称的行被分组在相同的NAME下,它们对应的SALARY是重复行的SALARY的总和。这里使用SQL的SUM()函数来计算和。
- 按多列分组 :按多列分组,例如,GROUP BY column1, column2. 这意味着将两列的值放在相同的行中 column1 和 column2 在一个组。考虑下面的查询:
SELECT SUBJECT, YEAR, Count(*)
FROM Student
GROUP BY SUBJECT, YEAR;
输出 :
正如您在上面的输出中看到的,SUBJECT和YEAR都相同的学生被放在同一个组中。而唯一的SUBJECT是相同的,而不是YEAR的则属于不同的组。因此,这里我们根据两列或多列对表进行了分组。
HAVING Clause
我们知道WHERE子句用于在列上放置条件,但是如果我们想在组上放置条件呢?
这时就需要使用HAVING子句了。我们可以使用HAVING子句来设置条件,以决定哪一组将成为最终结果集的一部分。此外,我们不能在WHERE子句中使用诸如SUM()、COUNT()等聚合函数。所以我们必须使用HAVING子句如果我们想在条件中使用这些函数。
语法 :
SELECT column1, function_name(column2)
FROM table_name
WHERE condition
GROUP BY column1, column2
HAVING condition
ORDER BY column1, column2;
function_name : 所使用的函数的名称,例如SUM(), AVG().
table_name : 表名.
condition : 使用条件.
示例 :
SELECT NAME, SUM(SALARY) FROM Employee
GROUP BY NAME
HAVING SUM(SALARY)>3000;
输出 :
正如您在上面的输出中看到的,三个组中只有一个组出现在结果集中,因为它是唯一一个SALARY之和大于3000的组。所以我们在这里使用HAVING子句来放置这个条件,因为条件需要放在组而不是列上。