Oracle总排

时间:2013-10-24 14:46:31

标签: oracle

我有一个大脑放屁,我似乎无法超越它。我以前做过这个,但我不记得我是怎么做到的。这是要点:我有一个我创建的表(测试),在这个表中我存储了一些随机信息。 (这是一个测试表,因此表中的信息不适用于任何事物)。我的测试表看起来像这样:

Name     varchar2 Primary key
age      varchar2
sex      char 
social   varchar2  Primary Key

我正在使用此表作为示例,这就是为什么我有两个主键。我正在向学生展示如何做复合键。

我的问题是:如何创建一个在行尾有总计数的查询?

我正在寻找类似的东西:

Name   Male  Female
xxxxx   m
xxxxx   m
xxxxx   m
xxxxx   m
xxxxx          F
xxxxx          F
Total:  4      2

我创建了以下查询(这不太有效),就像测试一样。

set feedback on    
compute sum(COUNT(SEX)) LABEL "# of males" of sex_count on report 
select count(sex) as sex_count
from test
where sex = upper('m')

2 个答案:

答案 0 :(得分:2)

这会解决您的问题吗?

select name, male, female from (
    select name, 
           decode( sex, 'm', 'm', null) Male, 
           decode( sex, 'f', 'f', null) Female, 0 n 
      from test
     union
    select 'Total', 
           to_char(sum(decode(sex, 'm', 1, 0))), 
           to_char(sum(decode(sex, 'f', 1, 0))), 
           1 
      from test
     group by 'Total' 
  ) order by n

链接到小提琴: http://sqlfiddle.com/#!4/0e501/3/0

答案 1 :(得分:0)

基于“compute ... on report”语句,看起来您正在使用SQL * Plus。试试这个:

compute count label total of male female on report
break on report

 select name, decode(sex, 'm', sex) male, decode(sex, 'f', sex) female
  from test
 order by name;