问一个常用的SQL
表:
班级(班级编号,班级名称)
学生(学生编号,班级编号)
查: 各班级的人数 显示(班级名称,人数)
没有的要显示0
问题点数:100、回复次数:6Top
1 楼zzhcims(离忧谷主)回复于 2003-12-02 08:54:44 得分 50
select max(班级.班级名称),isnull(count(学生.*))
from 学生,班级
where 学生.班级编号=*班级.班级编号
group by 学生.班级编号Top
2 楼zhoujinhuang(SKY)回复于 2003-12-02 09:46:30 得分 0
多谢
我把你的改了一下就可以了 isnull(count(学生.学生编号),0)
但是搞不懂max为什么会有着个作用
已经再加了50分 解释一下吧^_^Top
3 楼brook_huang(brook)回复于 2003-12-02 09:57:43 得分 50
select 班级.班级名称,sum(case when 学生.学生编号 is not null then 1 else 0 end) as 学生人数
from 学生,班级
where 学生.班级编号=*班级.班级编号
group by 学生.班级编号,班级.班级名称Top
4 楼brook_huang(brook)回复于 2003-12-02 10:04:41 得分 0
max主要是把字段“班级.班级名称”放在聚合函数里,对应group byTop
5 楼zhoujinhuang(SKY)回复于 2003-12-02 10:08:31 得分 0
如果要显示班级的老师,教室.....
是不是只能写 select max(班级.班级名称),max(班级.老师),max(班级.教室),....isnull(count(学生.*))
from 学生,班级
where 学生.班级编号=*班级.班级编号
group by 学生.班级编号
用子查询能不能解决?
select 班级.班级编号,班级.老师,NUM FROM 班级,(SELECT 班级.班级编号,COUNT(学生.学生编号) FROM 学生 GROUP BY 学生.班级编号) AS 班级编号1,NUM WHERE 班级编号1*=班级.班级编号
当然上面这句错了 SYBASE的子查询好像不是这样的Top
6 楼brook_huang(brook)回复于 2003-12-02 11:33:58 得分 0
你可以用临时表啊Top




