我对GROUP BY语句有疑问。我理解它是如何工作的以及它将做什么,但我无法想象它在我的大脑中(我希望这听起来不太奇怪)。我通过想象学习,但GROUP BY对我来说有些奇怪。
所以后续内容如下:FROM-> WHERE-> GROUP BY-> HAVING-> SELECT ....
假设我有一个数据库"孩子的名字"和他们的父母姓名"。所以有一些父母的名字当然不止一个孩子。
在群体发生的那一刻,桌子上究竟发生了什么?一组中的所有元素将组合成一行对吗?但是当我只剩下1行时,之后出现的SELECT怎么还能算出来?它有点可以解释我的观点究竟是什么。 当我使用SELECT *时,它将显示每组只有1行。当我使用SELECT COUNT(无论如何)时,它会给我1行,但正确的组成员数。但是在SELECT发生之前,该组已经不在1行吗? 我想要想象这个过程都是
答案 0 :(得分:1)
如果您想考虑group by
如何处理数据,您可以考虑以下机制。我想强调的是,实际处理可能会有很大不同;这只是为了说明。
group by
键排序。group by
键在结果集中定义一行。为了说明这一点:
key value
a 1
b 1
a 2
考虑查询:
select key, count(*), sum(value)
from t
group by key;
第一步排序:
key value
a 2 -- only the key is considered for the sort, the remaining columns are not
a 1
b 1
分成单位:
key value
a 2 -- only the key is considered for the sort, the remaining columns are not
a 1
-------
b 1
定义结果集行:
Original table Result set
key value key
a 2 a
a 1 b
-------
b 1
添加剩余列的计算:
Original table Result set
key value key count(*) sum(value)
a 2 a 2 3
a 1 b 1 1
-------
b 1
我需要强调这是概念性的 - 并且是实施group by
的一种有效方式。但是,SQL查询描述结果集,而不是用于生成结果集的特定处理。