这应该听起来很愚蠢,但我从来没有理解为什么聚合函数会将返回的记录限制为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
答案 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。