为什么聚合函数限制记录

时间:2012-05-04 23:40:33

标签: sql select limit aggregate-functions

这应该听起来很愚蠢,但我从来没有理解为什么聚合函数会将返回的记录限制为1.超过任何实际原因,这只是要知道。

id
1 
2
3
4

现在SELECT id FROM table产生

id
1 
2
3
4

如果我SELECT id, id, 1 AS p FROM table,则会给出

id    id p
1     1  1
2     2  1
3     3  1
4     4  1

接下来我假设SELECT id, MAX(2) AS p FROM table收益

id   p
1    2
2    2
3    2
4    2

但实际上这给了:

id   p
1    2

1)为什么聚合函数会发生这种情况,而不是给出我期望的结果?

2)我用MySQL和SQLite发现了这个。所有数据库都响应相同吗?

3)出于好奇,让我问一下,我如何查询以获得这样的观点:

id   max(id)
1    4
2    4
3    4
4    4

2 个答案:

答案 0 :(得分:1)

1)的规范回答是:这就是聚合和group by被定义和需要工作的方式。

re 3)在大多数现代DBMS中(只是不在MySQL和SQLite中)你可以这样做:

select id, 
       max(id) over ()
from your_table;

这将完全符合您的预期。

要在MySQL中获得所需内容,您需要使用子选择:

select id, 
       (select max(id) from your_table)
from your_table;

答案 1 :(得分:1)

1)您无法执行此表达式,因为ID不在聚合函数中。聚合函数只有在它们是选择中的唯一列时才能使用。这是因为它们返回单个值,而其他列通常返回多行。

2)我在Access中尝试了这个并且出错了。 (ID不在聚合函数中......)。我还没有尝试过其他数据库系统。

3)您可以通过在语句末尾添加GROUP BY ID来获得结果。这告诉系统您要在每个ID实例上使用聚合函数的每个结果。这使您可以在聚合函数之外使用ID。