sql-server - 为什么此 T-SQL 查询会抛出 "aggregate function"错误消息?

标签 sql-server t-sql aggregate aggregate-functions weighted-average

我正在使用 SQL Server 2014,并且我有以下 SQL 查询,该查询运行良好并提供以下输出:

SELECT 
    [PropertyCode], [BkgLeadTime], COUNT([Bkg Lead Time]) AS 'BLT COUNT' 
FROM 
    BOOKINGLEADTIME_CTE
GROUP BY 
    [PropertyCode], [Bkg Lead Time]

输出:

PropertyCode     BkgLeadTime        BLT COUNT
----------------------------------------------
   ZIL               1                4
   ZIL               2                2
   ZIL               5                1
   ZIL               7                12

我需要更改上述查询,以便只得到一行结果。基本上,我想计算上面显示的输出的加权平均值。

我的新查询如下:

SELECT 
    [PropertyCode], 
    SUM([Bkg Lead Time] * COUNT([Bkg Lead  Time])) / SUM (COUNT([Bkg Lead Time])) AS 'Weighted AVG BLT'
FROM 
    BOOKINGLEADTIME_CTE
GROUP BY 
    [PropertyCode]

但是,当我运行查询时,SSMS 抛出以下错误:

Cannot perform an aggregate function on an expression containing an aggregate or a subquery.

如何修改查询以避免此错误?我知道这与我使用的聚合语法有关,但我找不到重写此查询的正确方法。

预期输出是:

PropertyCode    Weighted AVG BLT
   ZIL             5.10

最佳答案

也许这会对你有所帮助

WITH CTE_TEST
AS
(   SELECT [PropertyCode], [BkgLeadTime], COUNT([Bkg Lead Time]) AS 'BLT_COUNT' 
    FROM BOOKINGLEADTIME_CTE
    GROUP BY [PropertyCode], [Bkg Lead Time]
)
SELECT SUM([BkgLeadTime]*[BLT_COUNT]) / SUM([BLT_COUNT]) FROM CTE_TEST

关于sql-server - 为什么此 T-SQL 查询会抛出 "aggregate function"错误消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36053006/

相关文章:

sql - 如何使用 SQL Server 列出文件夹内的文件

sql-server - 如何解析sql server中的xml以处理DateTime DataType中的NULL值

sql-server - 文本框中显示的数据库十进制值

r - 在不降低级别的情况下在 R 中汇总/汇总

sql-server - SSIS Excel 错误栏

sql - 如何在哪个数据库中发现名称为 'myStoredProcedure' 的存储过程?

sql-server-2008 - 无效的对象名称 - SQL Server 2008

python - Python 中的高效排序和聚合数据?

sql - PostgreSql 中的简单聚合查询非常慢,有什么改进方法吗?

c# - 使用 Entity Framework 在数据库之间复制实体