0

这听起来很愚蠢,但我从来不明白为什么聚合函数将返回的记录限制为 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
4

2 回答 2

1

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

2) 我在 Access 中尝试过,但出现错误。(ID 不在聚合函数中......)。我还没有在其他数据库系统上尝试过这个。

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

于 2012-05-04T23:59:22.160 回答
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;
于 2012-05-04T23:50:19.617 回答