sql - 按多列分组是什么意思?
问题描述
我使用 oracle 11g,所以我阅读了很多关于它的文章,但我不明白它在数据库中究竟是如何发生的,所以假设有两个表:
select * from Employee
select * from student
所以当我们想在多列中进行分组时:
SELECT SUBJECT, YEAR, Count(*)
FROM Student
GROUP BY SUBJECT, YEAR;
所以我的问题是:数据库中到底发生了什么?我的意思是查询计数(*)首先在 group by 的每一列中执行,然后对其进行排序?或者是什么?任何人都可以详细解释一下吗?
解决方案
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
)。
推荐阅读
- c++ - 避免在函数调用中计算数组元素
- amazon-web-services - AWS Cloudformation 创建的角色未显示在身份池下拉列表中
- nmake - 计算的宏名称
- php - 当我设置配置数据库时,它正在重置我的数据库连接
- c - 如何在 0 和 max 之间生成随机双精度(在 C 中)?
- android - 从 json api 获取嵌套值
- salesforce - 检查一百万条记录中是否存在数千条记录的有效方法
- javascript - 错误消息:未捕获的 TypeError:items.appendChild 不是函数
- html - Bootstrap 4 中的中心图像和 div 底层
- grammar - 这个递归规则中的顺序如何不给出相同的结果?