有三张表,分别是学生表stu,课程表cou,选课关系表sc
学生表的字段有sno sname,birthday,课程表的字段有cno  cname,选课关系表sc字段有sno  cno   grade
需求:查询出选课不少于2门的学生的姓名、选课门数,要求按照选课门数的降序排序,如果选课门数相同,按照姓名升序排序?
请问各位大神,sql应该如何写?

解决方案 »

  1.   

    select a.sname,count(b.cno) from stu a,cno b where a.sno = b.sno  group by a.sname having count(b.cno) >= 2 order by count(b.cno) desc,sname asc
      

  2.   

    select s.sname , c.sccount 
    from stu s 
    join (select sno ,count(sno) as sccount from sc grou by sno) c on s.sno  = c.sno
    where c.sccount >=2 
    order by s.sname asc;
      

  3.   

    select a.sname,count(1) t
    from stu a
    inner join sc b on a.sno=b.sno
    inner join cou c on b.cno=c.cno
    where t>2
    group by a.sname
    order by t desc,a.sname asc;