sql - 为什么我不能对包含聚合的表达式执行聚合函数,但可以通过围绕它创建新的 select 语句来执行聚合函数?

标签 sql sql-server sql-server-2008 tsql sql-server-2005

为什么在 SQL Server 中我不能这样做:

select  sum(count(id)) as 'count'
from    table

但是我可以

select sum(x.count)
from
(
    select  count(id) as 'count'
    from    table   
) x

它们本质上不是同一件事吗?我该如何思考这个问题才能理解为什么第一 block 代码是不允许的?

最佳答案

SUM() 在您的示例中是一个无操作 - COUNT() 的 SUM() 与 COUNT() 的含义相同。因此,您的示例查询似乎都没有做任何有用的事情。

在我看来,嵌套聚合只有在您想应用两种不同的聚合时才有意义 - 意味着在不同的列集上进行 GROUP BY。要指定两个不同的聚合,您需要使用 GROUPING SETS 功能或 SUM() OVER 功能。也许如果你解释一下你想要实现什么目标,有人可以告诉你如何实现。

关于sql - 为什么我不能对包含聚合的表达式执行聚合函数,但可以通过围绕它创建新的 select 语句来执行聚合函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10747963/

相关文章:

带名称的 MySql 主键约束

sql - 选择时的不同联合。 ntext 数据类型错误

sql-server - 如何使用 SQL Server CE 和 SQL Server 2008 Express?

sql - 如何在SQL Server中获取列的总和并在单个查询中显示?

sql-server - 将数据从一个数据库表复制到另一个数据库表的 SQL 代码

sql - 在 SQL Server 2008 Management Studio 中查找存储过程

sql - 如果列存在则选择columnValue,否则为null

php - MySQL SQL 获取表中的最新记录?

mysql - 在 SQL 请求中,如何查找字符串最后部分(最后一个空格之后)包含数字的所有记录

sql - 返回层次结构中第 N 级的类别名称(parentId -1 的类别位于第 1 级)