如何解决进行数学运算以从COUNT和GROUP BY状态元输出
假设我有一个是/否数据列。然后我可以按以下方式对每个结果类别中的观察值进行计数:
Select MyVar,count(MyVar) from MyTable
group by MyVaR;
输出类似:
MyVar count(MyVar)
Yes 10
No 5
如何向此输出表添加另一个元素,即分数(是/否),所以我的最终表类似于:
MyVar count(MyVar)
Yes 10
No 5
Fraction 2
对此有一个简单的解决方案吗?
解决方法
这是最简单的格式-使用<Layout>
:
union all
也就是说,我只使用条件聚合并将所有值放在一行中:
with t as (
Select MyVar,count(MyVar) as cnt
from MyTable
group by MyVaR
)
select MyVar
from t
union all
select 'Ratio',sum(case when MyVar = 'Yes' then cnt else 0 end) / sum(case when MyVar = 'No' then cnt else 0 end)
from t;
,
您可以使用group by grouping sets()
:
Select
case
when grouping(MyVar)=0 then MyVar
else 'Fraction'
end grouping_value,case
when grouping(MyVar)=0 then count(MyVar)
else count(decode(MyVar,'Yes',1)) / count(decode(MyVar,'No',1))
end c
from MyTable
group by grouping sets(MyVaR,())
带有示例数据的完整测试用例:
with MyTable(MyVar) as (
select *
from table(sys.odcivarchar2list(
'Yes','No'
))
)
Select
case
when grouping(MyVar)=0 then MyVar
else 'Fraction'
end grouping_value,1))
end val
from MyTable
group by grouping sets(MyVaR,())
;
结果:
GROUPING_VALUE VAL
--------------- ----------
No 5
Yes 10
Fraction 2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。