我明白了GROUP BY x。
GROUP BY x
但它是如何GROUP BY x, y工作的,它是什么意思?
GROUP BY x, y
Group By X意味着 将所有具有相同 X 值的人放在一组 中。
Group By X
Group By X, Y意味着 将所有具有相同 X 和 Y 值的人放在一组 中。
Group By 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 时;说:
group by
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 学期”组)
希望这是有道理的。