假设有table:
CREATE TABLE Test (
cid number(3),
sex char(1),
PRIMARY KEY (cid)
); sex = 'm' or 'f'如何写sql语句获得m和f的比例(即m/f)?Thanks!

解决方案 »

  1.   

     select sum(decode(sex,'m',1,0))/decode(sum(decode(sex,'f',1,0)),0,1,sum(decode(sex,'f',1,0))) from test;m为0返回0,f为0返回m个数
      

  2.   


    select sum(case when sex='m' then 1 else 0 end)/count(1),
    sum(case when sex='f' then 1 else 0 end)/count(1)
    from test
      

  3.   

    SELECT ROUND(T.M/T.F,2) 'RATE'
    FROM(
    SELECT  SUM(DECODE(SEX,'m',1,0)) 'M',SUM(DECODE(SEX,'f',1,0)) 'F'
    FROM TABLE
    GROUP BY SEX
    )T
      

  4.   


    select sum(case when sex='m' then 1 else 0 end)/count(1), 
    sum(case when sex='f' then 1 else 0 end)/count(1) 
    from test
      

  5.   

    感谢各位高手!#1显示效果最好,而其处理了除数为0的情况。#3#5方法相同,简洁巧妙,但显示效果不如#1。#4在我的oracle account上报错“divisor is equal to zero”,问题出在group by后除数或被除数会是0。
    我现在正在做web based 的data warehouse system. 因为对DB不熟悉,不知道有这些函数decode(), case()可以使用,今天真是学习了!我原本已经在Perl中写subroutine得到了结果。但是看来sql更简洁。