sql - 对 COUNT 和 GROUP BY statemetns 的输出进行数学运算
问题描述
假设我有一个是/否数据列。然后我可以通过以下方式计算每个结果类别中的观察结果
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
有一个简单的解决方案吗?
解决方案
您可以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','Yes','Yes','Yes','Yes','Yes','Yes','Yes','Yes','Yes',
'No','No','No','No','No'
))
)
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 val
from MyTable
group by grouping sets(MyVaR,())
;
结果:
GROUPING_VALUE VAL
--------------- ----------
No 5
Yes 10
Fraction 2
推荐阅读
- python - Django 按名称查询 content_type 而不是 content_type_id
- r - 如何取消列出字符串列以计算匹配项?
- json - 在 Dart/Flutter 中解析嵌套的 JSON
- python - 微调超参数不会提高分类器的分数
- angular - 角 9 SSR | 无法访问 ads.txt 文件
- postgresql - 如何在 PostgreSQL 中通过 cmd 使用 pg_restore 命令恢复 .bak 文件?
- unity3d - 为子像素阴影映射编码几何信息
- python - 如何处理 Python Selenium 中的“消息:过时的元素引用:元素未附加到页面文档”
- javascript - Javascript - 为存储在用户计算机上的静态网页读取/写入设置的推荐/安全方式是什么?
- html - 为什么叠加的图片和标志+文字不起作用?