【问题标题】:oracle sql statement to get counts with pivot, group by or windowing? oracle 11g [closed]oracle sql语句用pivot、group by或windowing获取计数?甲骨文 11g [关闭]
【发布时间】:2016-05-20 14:11:26
【问题描述】:

是否有可能并且有人可以给我一个很好的例子,在一个查询中选择一个结果集,该结果集返回人口统计或其他事物按特定分组分组的计数?这听起来真的很神秘,所以我将添加一个我试图交流的示例输出。我想要一个类似的结果集:

因此,对于每个类别,为性别填充的字段计数、男性计数、女性计数、填充种族的计数等等。

所以像 选择 curricul.class,count(stu.gender),count(stu.race),count(stu.eth) 从课程,stu 按班级分组 枢轴(计数(性别)为(男性,女性)中的性别

【问题讨论】:

  • 您没有告诉我们有关您正在使用的数据、表结构或您建议的查询会发生什么(使用旧式语法;使用 ANSI 连接)的任何信息更明显的是您缺少连接条件)。为什么要包含图像而不是显示所需内容的文本?不过,您似乎不想旋转。您是否正在寻找 count(case ... end) 以获取男性/女性号码?

标签: oracle plsql oracle-sqldeveloper plsqldeveloper mod-plsql


【解决方案1】:

你可以简单地使用:

with curricul as
(select 1 classid, 'Math' class from dual union all
 select 2, 'Literature' from dual
)
,
 student as
( select 1 id, 1 classid, 'male' gender, 1 race, 1 eth from dual union all
    select 2, 1, 'female', 1, 2 from dual union all
    select 3, 1, 'male'  , 3, 1 from dual union all
    select 4, 1, 'male'  , 5, 7 from dual union all
    select 5, 1, 'female', 4, 8 from dual union all
    select 6, 1, 'male'  , 1, 6 from dual union all
    select 7, 2, 'female', 3, 4 from dual union all
    select 8, 2, 'female', 1, 1 from dual union all
    select 9, 2, 'female', 7, 9 from dual union all
    select 10, 2, 'male' , 9, 1 from dual union all
    select 11, 2, 'female', 8, 1 from dual
)
select s.classid, curricul.class  
    ,count(s.gender)  as count_gender
    ,sum(case when gender = 'male' then 1 else 0 end) as count_male
    ,sum(case when gender = 'female' then 1 else 0 end) as count_female
    ,count(s.race)  as count_race
    ,count(s.eth) as count_ethnicity 
from student s
inner join curricul 
    on s.classid = curricul.classid
group by s.classid, curricul.class ;

【讨论】:

  • 如果性别可以为空,那么count(gender)count(*) 可以给出不同的结果。同样,您可能不希望计数中的不同 - 它可能只是计算填充了多少,尤其是。给出示例中的数字。实际上,它在问题的倒数第二段中说。
  • @AlexPoole 啊,谢谢你为空和解释
猜你喜欢
  • 2021-06-18
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 1970-01-01
  • 1970-01-01
  • 2019-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多