SQL group by语句
在SQL中, Group By 语句用于将相似的数据组织成组。数据进一步通过等价函数进行组织。这意味着,如果精确列中的不同行具有相同的值,它将把这些行排列到一个组中。
- SELECT语句 与SQL查询中的 GROUP BY 子句一起使用。
- WHERE子句 在 GROUP BY 子句之前放置在SQL中。
- ORDER BY子句 在 GROUP BY 子句之后放置在SQL中。
语法:
SELECT column1, function_name(column2)
FROM table_name
WHERE condition
GROUP BY column1, column2
ORDER BY column1, column2;
function_name: Table name.
Condition: which we used.
样本表格:
员工
S.no | Name | AGE | Salary |
---|---|---|---|
1 | John | 24 | 25000 |
2 | Nick | 22 | 22000 |
3 | Amara | 25 | 15000 |
4 | Nick | 22 | 22000 |
5 | John | 24 | 25000 |
学生
SUBJECT | YEAR | NAME |
---|---|---|
C language | 2 | John |
C language | 2 | Ginny |
C language | 2 | Jasmeen |
C language | 3 | Nick |
C language | 3 | Amara |
Java | 1 | Sifa |
Java | 1 | dolly |
示例:
按单列分组:Group By 单列用于将具有相同值的所有行放置在一起。这些值是指定列中的值。它表示所有行将通过一个适当的列放置相等数量的行,即在一个组中。
考虑下面的查询:
SELECT NAME, SUM (SALARY) FROM Employee
GROUP BY NAME;
查询的输出结果是:
NAME | SALARY |
---|---|
John | 50000 |
Nick | 44000 |
Amara | 15000 |
在输出中,持有重复 名称 的行被分组为类似的名称,并且它们对应的工资是重复行的工资总和。
- 基于多列进行分组: 一些列的组合 GROUP BY 列1,列2等。在这里,我们将所有具有相似的列1和列2的行放在一个组中。
考虑以下查询:
SELECT SUBJECT, YEAR, Count (*)
FROM Student
Group BY SUBJECT, YEAR;
输出:
SUBJECT | YEAR | Count |
---|---|---|
C language | 2 | 3 |
C language | 3 | 2 |
Java | 1 | 2 |
在上面的输出中,具有相似 SUBJECT 和 YEAR 的学生被分组在同一个地方。只有一件共同之处的学生属于不同的组。例如,如果姓名相同,年份不同。
现在,我们需要根据多个或两个列来进行分组。
HAVING子句
WHERE 子句用于决定目的。它用于对列设置条件,以确定组的最终结果集的部分。在这里,我们不需要在 WHERE 子句中使用组合函数,如 COUNT(),SUM(), 等。之后,我们需要使用 HAVING 子句。
HAVING子句语法:
SELECT column1, function_name(column2)
FROM table_name
WHERE condition
GROUP BY column1, column2
HAVING condition
ORDER BY column1, column2;
function_name: Mainly used for name of the function, SUM(), AVG().
table_name: Used for name of the table.
condition: Condition used.
示例:
SELECT NAME, SUM(SALARY) FROM Employee
GROUP BY NAME
HAVING SUM(SALARY)>23000;
输出:
Name | SUM(SALARY) |
---|---|
John | 50000 |
根据以上输出,结果中只列出了NAME列中的一个姓名,因为数据库中只有一条数据的工资总和超过50000。
它应该放在组上,而不是在列上。
要点:
- GROUP BY 子句用于对具有相同值的行进行分组。
- 在 SQL 中,SELECT语句与GROUP BY子句一起使用。
- 在 GROUP BY 子句中,SELECT语句可以使用 常量、聚合函数、表达式和列名 。
- 当使用HAVING子句来缩小结果时,调用 GROUP BY 子句。