协慌网

登录 贡献 社区

在多列上使用 group by

我理解GROUP BY x的观点

GROUP BY x, y如何运作的,它是什么意思?

答案

Group By X表示将所有具有相同 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 个条目

如果我们group by两列group by

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

我们会得到这个:

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

这是因为,当我们按两列分组时,它会说“将它们分组以便所有具有相同主题和学期的人在同一组中,然后计算所有聚合函数 (Count,Sum,Average 等)。 ) 对于每个群体 “ 。在这个例子中,事实证明了这一点,当我们计算它们时,有个人在第一学期做 ITB001, 两个人在第二学期做这个。做 MKB114 的人都在第一学期,所以没有第二学期的行(没有数据适合 “MKB114,第二学期” 组)

希望这是有道理的。

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(*)返回表中的行数