在一个student表中,有sno学号,sname姓名,ssex性别,sdept专业。
使用select count(*) aa, ssex from student group by ssex后得出一下结果
   aa   ssex
--------------
    1    男
    3    女
要把行列颠倒一下,更符合表格输出的格式,可以使用以下语句。
select s1.aa as 男, s2.aa as 女
from (
select count(*) aa, ssex from student group by ssex
) s1,
(
select count(*) aa, ssex from student group by ssex
) s2
where s1.ssex = '男' and s2.ssex = '女'
   男    女
--------------
   1     3不过应该有方法可以写出更漂亮的SQL,请教大家一下啦。

解决方案 »

  1.   

    你这个效率不行啊
    select sum(decode(ssex,'男',1,0)) 男,
           sum(decode(ssex,'女',1,0)) 女
    from student
      

  2.   


    恩,是可以直接从原表中抓取。谢谢了。
    但是如果情况更复杂一些呢?
    已知的是
    姓名     性别     成绩
    --------------------
    张三     男       95
    李四     女       75
    马超     男       99
    关羽     男       99那算男女总分也可以用decode的吗?
      

  3.   

    select sum(decode(性别,'男',成绩,0)) 男, 
          sum(decode(性别,'女',成绩,0)) 女 
    from student 
      

  4.   

    select count(case
                   when sex = '男' then
                    '男'
                 end) 男,
           count(case
                   when sex = '女' then
                    '女'
                 end) 女
      from student