“按多列分组”是什么意思?

时间:2019-03-30 21:15:23

标签: sql oracle

我使用oracle 11g,所以我读了很多关于它的文章,但我不明白 它在数据库中到底发生了什么,所以可以说有两个表:

select * from Employee

result is here

select * from student

result is here

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

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

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

1 个答案:

答案 0 :(得分:1)

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

查询所要做的是确定原始数据中的所有行,其中group by键相同。然后将它们减少为一行。

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

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)。