首页 > 解决方案 > 按多列分组是什么意思?

问题描述

我使用 oracle 11g,所以我阅读了很多关于它的文章,但我不明白它在数据库中究竟是如何发生的,所以假设有两个表:

select * from Employee

结果在这里

select * from student

结果在这里

所以当我们想在多列中进行分组时:

SELECT SUBJECT, YEAR, Count(*)
FROM Student
GROUP BY SUBJECT, YEAR;

所以我的问题是:数据库中到底发生了什么?我的意思是查询计数(*)首先在 group by 的每一列中执行,然后对其进行排序?或者是什么?任何人都可以详细解释一下吗?

标签: sqloracle

解决方案


SQL 是一种描述性语言,而不是一种过程语言。

查询所做的是确定原始数据中按键分组的所有行。然后将它们减少到一行。

例如,在您的数据中,这些都具有相同的数据:

subject   year    name
English    1      Harsh
English    1      Pratik
English    1      Ramesh

你说的是group by subject, year,所以这些变成:

Subject    Year   Count(*)
English    1      3

通常,这种聚合是使用排序实现的。然而,这取决于数据库——还有许多其他算法。您不能假设数据库会对数据进行排序。但是,如果您更容易想到,您可以考虑group by按键对数据进行排序,以识别组。请注意,返回的值不一定按任何特定顺序排列(除非您的查询包含order by)。


推荐阅读