【发布时间】:2009-09-08 01:51:54
【问题描述】:
我试图从集合的角度来考虑数据,但对聚合函数有一些疑问。
这是来自维基的定义
聚合函数是一个函数 从 a 返回单个值 输入值的集合,例如 设置
例如,
select c.id, c.user_id, c.name, c.created_at, count(c.id) from collections c;
可以认为“count从集合c集合中返回单个值”
select c.id, c.user_id, c.name, c.created_at, count(c.id)
from collections c group by c.user_id
可以认为“count从一个collection(c) set的每个子集(set from group by)中返回一个值”
我的问题是,我如何知道计数从哪个“单个值”返回,在这种情况下,是 collection(c) 集合或每个“分组依据”子集。
考虑一个稍微复杂的查询(TOP N PER GROUP)
select c.id, c.user_id, c.name, c.created_at
from collections c
left join collections co on c.user_id = co.user_id and c.name <=co.name
group by c.user_id, c.name
having count(*)<=2;
这里设置 group by(c.user_id) 有自己的子集 (c.name),我怎么知道 count(*) 将返回什么(整个集合的单个值(这将只是一个rol)? 或每个子集的单个值(c.user_id) 或每个子集的单个值(c.name)?)
【问题讨论】: