SQL:跨行计算,结果新建一行
SQL: Perform calculation across rows, creating a new row for the result
我用 GROUP BY 对不同的值做了一些总结和计数,得到以下结果:
DATE | Parameter | Count
2000 | Desired | 10
2000 | Reality | 9
2001 | Desired | 17
2001 | Reality | 17
etc.
现在我想计算每年的百分比现实/期望并将结果存储在一个新行中,参数名为Percentage .
就像:
DATE | Parameter | Count
2000 | Desired | 10
2000 | Reality | 9
2000 | Percentage| 90
2001 | Desired | 17
2001 | Reality | 17
2001 | Percentage| 100
etc.
我已经考虑过连接之外的一些组合,window 函数用于计算百分比并使用 CTE 和 UNION ALL 创建新行,但我被卡住了,需要一些灵感。
非常感谢!
一种方法使用条件聚合:
select date, parameter, count
from t
union all
select date, 'Percentage',
( sum(case when parameter = 'Reality' then count end) /
sum(case when parameter = 'Desired' then count end)
)
from t
group by date;
我应该注意,如果您想将行实际添加到 table 中,您可以 insert
第二个查询的结果。
我用 GROUP BY 对不同的值做了一些总结和计数,得到以下结果:
DATE | Parameter | Count
2000 | Desired | 10
2000 | Reality | 9
2001 | Desired | 17
2001 | Reality | 17
etc.
现在我想计算每年的百分比现实/期望并将结果存储在一个新行中,参数名为Percentage . 就像:
DATE | Parameter | Count
2000 | Desired | 10
2000 | Reality | 9
2000 | Percentage| 90
2001 | Desired | 17
2001 | Reality | 17
2001 | Percentage| 100
etc.
我已经考虑过连接之外的一些组合,window 函数用于计算百分比并使用 CTE 和 UNION ALL 创建新行,但我被卡住了,需要一些灵感。
非常感谢!
一种方法使用条件聚合:
select date, parameter, count
from t
union all
select date, 'Percentage',
( sum(case when parameter = 'Reality' then count end) /
sum(case when parameter = 'Desired' then count end)
)
from t
group by date;
我应该注意,如果您想将行实际添加到 table 中,您可以 insert
第二个查询的结果。