Sql server 具有平均和

Sql server 具有平均和,sql-server,tsql,Sql Server,Tsql,我试图结合总和的平均值,但这给了我一个错误 select count(orderId) order, sum(amount) amountSum from orders group by productId having sum(Amount > avg(sum(Amount)) 我可以把所有东西都关起来 select * from (...) outer where outer.amountSum > 这里复制所有查询,但计算平均值,有更好的方法吗 sql server是

我试图结合总和的平均值,但这给了我一个错误

select
count(orderId) order,
sum(amount) amountSum
from orders
group by productId
having sum(Amount > avg(sum(Amount))
我可以把所有东西都关起来

select * from (...) 
outer where outer.amountSum >  

这里复制所有查询,但计算平均值,有更好的方法吗

sql server是否接受双重聚合?Nevermind AVG(SUM)没有意义它会给您一个错误?也许您可以共享该错误消息?您发布的查询至少有三个语法错误。您使用保留字对列进行了别名,但没有将其包装为[]。最好的解决方法是使用另一个别名。列之间没有逗号,并且缺少SUM(Amount)的右括号。然后,尝试嵌套没有任何意义的聚合。请仔细考虑AVG(SUM(Amount))..平均值不会改变,因为您有一个聚合作为参数。每行的总和(金额)值永远不会改变。也许您正在寻找总和(金额)>平均值(金额)。这在语法和逻辑上都是有效的。快速而肮脏的解决方案:
选择前50%…按总和(金额)排序
@SeanLange我只想显示按产品分组的数量总和,其中数量总和大于所有数量总和的范围sql server是否接受双重聚合?无需指定平均值(SUM没有意义它会给你一个错误?也许你可以分享这个错误消息?你发布的查询至少有三个语法错误。你用保留字给一个列加了别名,但没有用[]括起来。最好的解决办法是使用另一个别名。你的列之间没有逗号,你的SUM缺少一个右括号。)(Amount)。然后你尝试嵌套没有任何意义的聚合。仔细考虑AVG(SUM(Amount))……平均值不会改变,因为你有一个聚合作为参数。SUM(Amount)的值永远不会每行改变。也许你在寻找SUM(Amount)>AVG(Amount)。这在语法和逻辑上都是有效的。快速而肮脏的解决方案:
选择前50%…按总和排序(金额)
@SeanLange我只想显示按产品分组的AmountSum,其中AmountSum大于所有AmountSum的一个范围。这是为什么;在开始时需要?@kosnkov噢,这是一个习惯……如果使用
WITH
子句,则必须以分号(
)终止前面的语句。只是为了确保我总是以分号开头
WITH
子句。为什么;开头需要这样做?@kosnkov噢,这是一个习惯……如果您使用
WITH
子句,则前面的语句必须以分号(
)结尾.为了确保我总是以分号开头
WITH
子句。
;WITH order_stats AS ( 
    SELECT
        productId,
        order_count=COUNT(orderId),
        total=SUM(amount)
    FROM
        orders
    GROUP BY
        productId
)
SELECT
    *
FROM
    order_stats
WHERE
    total>(SELECT AVG(total) FROM order_stats);