我使用oracle 11g,所以我读了很多关于它的文章,但我不明白 它在数据库中到底发生了什么,所以可以说有两个表:
select * from Employee
select * from student
所以当我们要在多列中进行分组时:
SELECT SUBJECT, YEAR, Count(*)
FROM Student
GROUP BY SUBJECT, YEAR;
所以我的问题是:数据库中到底发生了什么?我的意思是查询count(*)首先在group by中的每一列中进行排序,然后对其进行排序?还是什么?有人可以详细解释吗?。
答案 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
)。