日期:2014-05-17  浏览次数:20661 次

求个sql怎么写啊! 条件判断,分组 ,统计的问题!
如题所说
举个例子,比如说我有表STUDENT , 有列 NAME ,COURSE,SCORE
有几行数据

张三 语文 50
张三 数学 70
张三 英语 40

李四 语文 80
李四 数学 80
李四 英语 80

王五 语文 25
王五 数学 25
王五 英语 25

赵六 语文 90
赵六 数学 90
赵六 英语 20

。。。

想要一条sql语句:做一个统计,得到每位同学及格的科目数,并计算出及格科目数的总分(不及格的不算进去)(举的是例子 没有实际意义)

结果应该是这样
姓名 及格科目数 及格科目总分
张三 1 70
李四 3 240
王五 0 0
赵六 2 180


这个sql怎么写??求大神指导我,感激不尽啊!

------解决方案--------------------
没考虑效率,结果也不是你的顺序(这个,可以把每个名字用一ID表示,一般设计表时必须的)
select name,sum(m_total) ,sum(m_count) from (
select name,sum(score) m_total ,count(*) m_count from STUDENT where score >=60 group by name
union
select name,0,0 from STUDENT where score <60 group by name
) group by name

按你上面的数据,得到:
NAME SUM(M_TOTAL) SUM(M_COUNT)
---------- ------------ ------------
李四 240 3
王五 0 0
张三 70 1
赵六 180 2

------解决方案--------------------
SELECT NAME,COUNT(COURSE),SUM(SCORE) FROM (SELECT * FROM SCORE WHERE SCORE>=60)
GROUP BY NAME
UNION ALL
SELECT DISTINCT NAME,CASE WHEN SCORE <60 THEN 0 END,CASE WHEN SCORE <60 THEN 0 END FROM 
(
SELECT NAME,COURSE,SCORE FROM SCORE WHERE SCORE<60 AND NAME NOT IN
(SELECT NAME FROM SCORE WHERE SCORE>=60))