table student
col: sno sname sage ssex sdept
结果如下:(两条结果)
result1:
sdept  总人数   男生人数   女生人数   
result2:
sdept   15<sage<18     18<sage<20    其他人数(其中 Student 是表  COL是字段  SNO是学号   SNAME是姓名
SAGE是年龄  SSEX是性别  SDEPT是院系)
 
请问上述2个RUSULT的用SQL的实现!
拜谢!!!!  

解决方案 »

  1.   

    例子:
    表内数据:
           SNO SNAME            SAGE SSEX       SDEPT
    ---------- ---------- ---------- ---------- ----------
             1 wang1              16 男         计算机
             2 wang12             16 女         计算机
             3 wang13             18 男         计算机
             4 wang14             16 女         计算机
             5 wang15             16 男         物理
             6 wang16             18 女         物理
             7 wang17             16 男         物理
             8 wang18             21 男         物理
             9 wang19             16 男         计算机select distinct student.sdept,male+fmale as 总人数,fmale,male
    from student,
    (select count(*) fmale,sdept from student where ssex='女'
    group by sdept)fmale,
    (select count(*) male,sdept from student where ssex='男'
    group by sdept) male
    where student.sdept=fmale.sdept and student.sdept=male.sdept
    ;结果:
    SDEPT          总人数      FMALE       MALE
    ---------- ---------- ---------- ----------
    计算机              5          2          3
    物理                4          1          3第二个类似 可以自己作把
      

  2.   

    上面这个台复杂 有个简单的方法:
    select sdept,count(*) 总人数,count(decode(ssex,'女',1)) FMALE,count(decode(ssex,'男',1)) MALE
     from student
    group by sdept;
      

  3.   

    select sdept,count(decode(abs(sign(18-sage)+sign(sage-14)),2,1,1,1)) "14<sage<18",
    count(decode(abs(sign(20-sage)+sign(sage-19)),2,1,1,1)) "18<sage<20",
    count(decode(sign(sage-20),1,1)) else
    from student;
      

  4.   

    to :lordsongqing()假如還有比14小的呢?也就是說”其它人數“是 sage<14 and sage>20 
    怎麼寫?