📜  SQL GROUP BY

📅  最后修改于: 2020-11-12 00:34:15             🧑  作者: Mango

SQL分组依据

在SQL中,Group By语句用于将相似的数据组织成组。数据在等效函数的帮助下进一步组织。这意味着,如果精确列中的不同行具有相同的值,则会将这些行排列在一组中。

  • SELECT语句与SQL查询中的GROUP BY子句一起使用。
  • WHERE子句在SQL中的GROUP BY子句之前。
  • 在SQL中,将ORDER BY子句放置在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之和。

  • 基于多个列的分组:一些列的分组是GROUP BY列1column2。在这里,我们将所有行都放在具有第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相似的学生被分组在同一位置。仅有共同点的学生属于不同的群体。例如,如果名称相同而年份不同。

现在,我们必须根据多于一列或两列对表进行分组。

有条款

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列中仅列出了一个名称。

应该将其放在组上,而不是在列上。

要点:

  • GROUP BY子句用于对具有相同值的行进行分组。
  • SQL中的SELECT语句与GROUP BY子句一起使用。
  • Group BY子句中,SELECT语句可以使用常量,聚合函数,表达式列名
  • 使用HAVING子句减少结果时,将调用GROUP BY子句。