求个sql怎么写啊! 条件判断,分组 ,统计的问题!

xiaoyuaixiaofan 2011-10-04 07:43:43
如题所说
举个例子,比如说我有表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怎么写??求大神指导我,感激不尽啊!
...全文
305 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaoyuaixiaofan 2011-10-06
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 youshang444 的回复:]
SQL code
select name, sum(case when score>=60 then 1 else 0 end) as jigekemu,sum(case when score>=60 then sscore else 0 end) as jigezongfen from student group by name;
[/Quote]

8楼是最佳方案 结贴的时候没注意不好意思
youshang444 2011-10-05
  • 打赏
  • 举报
回复
select name, sum(case when score>=60 then 1 else 0 end) as jigekemu,sum(case when score>=60 then sscore else 0 end) as jigezongfen from student group by name;
qq542015769 2011-10-04
  • 打赏
  • 举报
回复
select name,count(course),sum(score) from(select * from s where score >=60) as a group by name
柯本 2011-10-04
  • 打赏
  • 举报
回复
看不到图...
adagio2007 2011-10-04
  • 打赏
  • 举报
回复
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))
xiaoyuaixiaofan 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 keiy 的回复:]
没考虑效率,结果也不是你的顺序(这个,可以把每个名字用一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 ……
[/Quote]

牛啊!大神啊!太强了。。还是出了点小问题

数据如下:

结果多了个张三




柯本 2011-10-04
  • 打赏
  • 举报
回复
没考虑效率,结果也不是你的顺序(这个,可以把每个名字用一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
xiaoyuaixiaofan 2011-10-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 im110 的回复:]
select a.name, count(a.score) as kemu, sum(a.score) as total from (select name, score from student where score > 60) as a;
[/Quote]

错的!!!!!!

一 select name, score from student where score > 60 王五没了!
二 没分组
还不如不回复!!!
im110 2011-10-04
  • 打赏
  • 举报
回复
select a.name, count(a.score) as kemu, sum(a.score) as total from (select name, score from student where score > 60) as a;

81,095

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧