multiple - sql group by详解




在多列上使用分组 (2)

我明白GROUP BY x

GROUP BY x, y如何工作的,这是什么意思?


GROUP BY子句与聚合函数结合使用,可将结果集按一个或多个列分组。 例如:

SELECT column_name, aggregate_function(column_name)
FROM table_name
WHERE column_name operator value
GROUP BY column_name;

记住这个命令:

1)SELECT(用于从数据库中选择数据)

2)FROM(子句用于列出表)

3)WHERE(子句用于过滤记录)

4)GROUP BY(子句可以在SELECT语句中用于跨多个记录收集数据,并将结果按一个或多个列分组)

5)HAVING(子句与GROUP BY子句结合使用,将返回行的组限制为只有条件为TRUE的行)

6)ORDER BY(关键字用于排序结果集)

如果您使用聚合函数,则可以使用所有这些函数,并且这是它们必须设置的顺序,否则可能会出错。

聚合函数是:

MIN返回给定列中的最小值

SUM返回给定列中数值的总和

AVG返回给定列的平均值

COUNT返回给定列中值的总数

COUNT(*)返回表中的行数


Group By X表示 Group By X 所有具有相同值的人放在一个组中

Group By X, Y表示将X和Y中所有具有相同值的那些组合在一个组中

为了举例说明一下,假设我们有如下表格来处理谁在大学学习什么科目:

Table: Subject_Selection

Subject   Semester   Attendee
---------------------------------
ITB001    1          John
ITB001    1          Bob
ITB001    1          Mickey
ITB001    2          Jenny
ITB001    2          James
MKB114    1          John
MKB114    1          Erica

当您仅在主题栏中使用group by 说:

select Subject, Count(*)
from Subject_Selection
group by Subject

你会得到像这样的东西:

Subject    Count
------------------------------
ITB001     5
MKB114     2

...因为ITB001有5个条目,MKB114有2个条目

如果我们要分两列:

select Subject, Semester, Count(*)
from Subject_Selection
group by Subject, Semester

我们会得到这个:

Subject    Semester   Count
------------------------------
ITB001     1          3
ITB001     2          2
MKB114     1          2

这是因为,当我们按两列进行分组时,它们是“将它们分组,以便所有具有相同主题和学期的人都在同一组中,然后计算所有聚合函数 (计数,总和,平均值等)。 ) 为每个这些组“ 。 在这个例子中,通过这样一个事实可以证明这一点,当我们计算它们时,在第一学期有个人在做ITB001,在第二学期有两个人在做ITB001。两个做MKB114的人都在第一学期,所以没有排第2学期(没有数据适合组“MKB114,第2学期”)

希望这是有道理的。





group-by