首页 > 解决方案 > 对 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

有一个简单的解决方案吗?

标签: sqloracletoad

解决方案


您可以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

推荐阅读