📅  最后修改于: 2020-11-12 00:34:15             🧑  作者: Mango
在SQL中,Group By语句用于将相似的数据组织成组。数据在等效函数的帮助下进一步组织。这意味着,如果精确列中的不同行具有相同的值,则会将这些行排列在一组中。
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 |
单个列分组:单个列分组用于放置所有具有相同值的行。这些值是一组中指定列的值。它表示所有行将在同一列中放置相等的数量,该列属于一组中的适当列。
考虑以下查询:
SELECT NAME, SUM (SALARY) FROM Employee
GROUP BY NAME;
查询的输出是:
NAME | SALARY |
---|---|
John | 50000 |
Nick | 44000 |
Amara | 15000 |
在输出中,将包含重复名称的行分组在相似的名称下,并且它们对应的SALARY是重复行的SALARY之和。
考虑以下查询:
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相似的学生被分组在同一位置。仅有共同点的学生属于不同的群体。例如,如果名称相同而年份不同。
现在,我们必须根据多于一列或两列对表进行分组。
有条款
WHERE子句用于确定目的。它用于在列上放置条件,以确定组的最后结果集的一部分。在这里,我们不需要将组合函数(如COUNT(),SUM()等)与WHERE子句一起使用。之后,我们需要使用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 |
根据上面的输出,由于数据库中只有一个薪水总和大于50000的数据,因此NAME列中仅列出了一个名称。
应该将其放在组上,而不是在列上。