📜  SQL |通过…分组

📅  最后修改于: 2021-05-20 06:11:07             🧑  作者: Mango

SQL中的GROUP BY语句用于借助某些功能将相同的数据分组。即,如果特定的列在不同的行中具有相同的值,则它将把这些行排列在一组中。

重要事项:

  • GROUP BY子句与SELECT语句一起使用。
  • 在查询中,GROUP BY子句放在WHERE子句之后。
  • 在查询中,如果使用GROUP BY子句,则将其放在ORDER BY子句之前。

语法

SELECT column1, function_name(column2)
FROM table_name
WHERE condition
GROUP BY column1, column2
ORDER BY column1, column2;

function_name: Name of the function used for example, SUM() , AVG().
table_name: Name of the table.
condition: Condition used.

样品表:

员工

桌子

学生

截图(54)
例子:

  • 按单列分组:按单列分组是指将仅具有该特定列的相同值的所有行放入一组。考虑如下查询:
    SELECT NAME, SUM(SALARY) FROM Employee 
    GROUP BY NAME;
    

    上面的查询将产生以下输出:
    table_out
    如您在上面的输出中看到的,具有重复名称的行被分组在同一名称下,并且它们对应的SALARY是重复行的SALARY的总和。 SQL的SUM()函数用于计算总和。

  • 按多个列分组:例如,按多个列分组,例如GROUP BY column1,column2 。这意味着将具有相同列column1column2值的所有行放在一组中。考虑以下查询:
    SELECT SUBJECT, YEAR, Count(*)
    FROM Student
    GROUP BY SUBJECT, YEAR;
    

    输出
    截图(55)
    如您在上面的输出中看到的,将具有相同的“主题”和“年份”的学生放在同一组中。而那些唯一的主题相同但年份不同的人则属于不同的群体。因此,这里我们根据两列或不止一列对表进行了分组。

有条款

我们知道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: Name of the function used for example, SUM() , AVG().
table_name: Name of the table.
condition: Condition used.

范例

SELECT NAME, SUM(SALARY) FROM Employee 
GROUP BY NAME
HAVING SUM(SALARY)>3000; 

输出
截图(56)
如您在上面的输出中看到的,结果集中只有三个组中的一个出现在结果集中,因为它是SALARY的总和大于3000的唯一组。因此,我们在这里使用HAVING子句将此条件设置为条件必须放在组而不是列上。