我的数据集如下所示:
cat subcat amount
a x1 1
a x1 1
a x1 1
a x2 4
a x2 4
a x3 6
a x4 3
a x5 7
我希望SQL查询做的是:
AVG
值
SUM
置于'猫'级别步骤1之后的结果数据集应为:
cat subcat amount
a x1 1
a x2 4
a x3 6
a x4 3
a x5 7
步骤2之后的结果数据集应为:
cat amount
a 21
现在我知道使用子查询或创建临时表可以轻松实现这一点。但我希望一步完成(不使用子查询。)
答案 0 :(得分:1)
你能不做CTE吗?考虑一下您要求的内容:您想知道基于2列的表组的所有行的平均值(这意味着您必须读取表中的所有行) ,然后你想要每个分组的所有新创建的值的总和 - 在开始查询之前,这个数据集甚至不存在。
答案 1 :(得分:0)
以下在技术上是一个子查询,但如果在子级别真正重复数量,则只需要一个聚合
Declare @Table table (cat varchar(10), subcat varchar(10), amount decimal(10,2))
Insert into @Table values
('a','x1', 1),
('a','x1', 1),
('a','x1', 1),
('a','x2', 4),
('a','x2', 4),
('a','x3', 6),
('a','x4', 3),
('a','x5', 7)
Select cat,SoA=sum(a.amount) from (Select Distinct * from @Table) A group by cat
返回
cat SoA
a 21.00
答案 2 :(得分:-1)
您可以使用子查询:
SELECT cat,
SUM(amount) as amount
FROM (
SELECT cat,
subcat,
AVG(amount) as amount
FROM YourTable
GROUP BY cat, subcat
) as p
GROUP BY cat
或CTE:
;WITH cte as (
SELECT cat,
subcat,
AVG(amount) as amount
FROM YourTable
GROUP BY cat, subcat
)
SELECT cat,
SUM(amount) as amount
FROM cte
GROUP BY cat
输出:
cat amount
a 21