小编典典

在多列上使用 group by

all

我明白了GROUP BY x

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


阅读 191

收藏
2022-02-25

共1个答案

小编典典

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仅在主题列上使用 a 时;说:

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

你会得到类似的东西:

+---------+-------+
| Subject | Count |
+---------+-------+
| ITB001  |     5 |
| MKB114  |     2 |
+---------+-------+

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

如果我们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 |
+---------+----------+-------+

这是因为,当我们按两列分组时,就是说 “将它们分组,使所有具有相同主题和学期的人都在同一组中,然后计算所有聚合函数 (计数、总和、平均值等)。 )
为每个这些组” 。在这个例子中,当我们计算他们时,第一学期有 个人在做 ITB001,第二学期有 两个 人在做。这两个人在做
MKB114 都是在第一学期,所以没有第 2 学期的行(没有数据适合“MKB114,第 2 学期”组)

希望这是有道理的。

2022-02-25