首页 新闻 赞助 找找看

sql统计语句怎么写?

0
悬赏园豆:20 [已解决问题] 解决于 2014-06-03 12:57

有一张学生表:stuInfo(id,name,check,evaluate)分别是学生的id,姓名,考核项,考核内容;多个老师可以对同一个学生考核相同的内容;
如图:

 

现在是需要对考核的内容进行分类统计,显示效果如图:

由于对数据库这一窍不通,所以想请问大家这个SQL语句怎么写?非常感谢!

sysmenu的主页 sysmenu | 初学一级 | 园豆:71
提问于:2014-06-02 21:21
< >
分享
最佳答案
0

思路是对name、check进行分组统计,其中evaluate固定是“优良差”中的一个,那么可以通过case进行判断后统计

select name, check, count(*), sum(case when evaluate='优' then 1 else 0 end,sum(case when evaluate='良' then 1 else 0 end,sum(case when evaluate='差' then 1 else 0 end

from stuInfo

group by name, check

收获园豆:8
诶碧司 | 小虾三级 |园豆:1912 | 2014-06-02 22:44

非常感谢您的回答,效果很好。

sysmenu | 园豆:71 (初学一级) | 2014-06-03 12:50
其他回答(3)
0

select name 姓名, check 考核项, count(*) 考核总数,

sum(decode(evaluate,'优',1,0))  优,

sum(decode(evaluate,'良',1,0))  良,

sum(decode(evaluate,'差',1,0))  差,

from stuInfo

group by name, check

收获园豆:6
崴脚步花盐人 | 园豆:269 (菜鸟二级) | 2014-06-02 23:04

这个方法使用于oracle数据库中,sqlserver的好像不行,不过写的很对,很感谢

支持(0) 反对(0) sysmenu | 园豆:71 (初学一级) | 2014-06-03 12:50
0
 1 create table stuinfo(
 2 id int identity(1,1),
 3 name nvarchar(200),
 4 [check] nvarchar(200),
 5 evaluate nvarchar(200),
 6 )
 7 insert into stuinfo(name,[check],evaluate) values('张三','学习','')
 8 insert into stuinfo(name,[check],evaluate) values('张三','学习','')
 9 insert into stuinfo(name,[check],evaluate) values('张三','纪律','')
10 insert into stuinfo(name,[check],evaluate) values('张三','纪律','')
11 insert into stuinfo(name,[check],evaluate) values('张三','学习','')
12 insert into stuinfo(name,[check],evaluate) values('张三','学习','')
13 insert into stuinfo(name,[check],evaluate) values('李四','纪律','')
14 insert into stuinfo(name,[check],evaluate) values('李四','学习','')
15 insert into stuinfo(name,[check],evaluate) values('李四','纪律','')
16 insert into stuinfo(name,[check],evaluate) values('李四','学习','')
17 insert into stuinfo(name,[check],evaluate) values('李四','纪律','')
18 insert into stuinfo(name,[check],evaluate) values('李四','学习','')
19 
20 
21 select * from stuinfo
22 
23 
24 select name as 姓名,[check] as 考核项,
25 (select COUNT(*) from stuinfo  as total where total.name=s.name and total.[check]=s.[check] ) as 考核总数, 
26 (select COUNT(*) from stuinfo  as you where you.name=s.name and you.[check]=s.[check] and you.evaluate='') as 优,
27 (select COUNT(*) from stuinfo  as liang where liang.name=s.name and liang.[check]=s.[check] and liang.evaluate='') as 良,
28 (select COUNT(*) from stuinfo  as cha where cha.name=s.name and cha.[check]=s.[check] and cha.evaluate='') asfrom stuinfo as s 
29 group by s.name,s.[check]
收获园豆:6
新麦穗 | 园豆:82 (初学一级) | 2014-06-03 09:59

真是麻烦您了,还把表创建出来,虽然语句有些多,但是也很实用,非常感谢

支持(0) 反对(0) sysmenu | 园豆:71 (初学一级) | 2014-06-03 12:56
0

好像 优良差 的个数没有显示啊

恋人星空 | 园豆:260 (菜鸟二级) | 2014-07-24 16:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册