成绩分组统计问题

nangangshi 2013-08-26 04:07:46
我有全市的成绩库,我想统计每个学校每个科目的优秀率、及格率和低分率,如科目为语文、数学、英语、物理、化学等,优秀率为90-100分,及格率为60-89分,低分率为0-29
...全文
153 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shawn 2013-08-26
  • 打赏
  • 举报
回复
if OBJECT_ID('tempdb..#temp', 'u') is not null   drop table #temp;
go
create table #temp( [xm] varchar(100), [xb] varchar(100), [xxmc] varchar(100), [yw] int, [sx] int, [wy] int, [zf] int);
insert #temp
select '张三','男','一中','60','80','59','68' union all
select '李四','女','一中','56','99','56','68' union all
select '王五','男','十六中','88','91','98','68' 

--SQL:
select 
	[xxmc],
	[语文优秀率]=LTRIM(CAST(100.0*COUNT(CASE WHEN yw BETWEEN 90 AND 100 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[语文及格率]=LTRIM(CAST(100.0*COUNT(CASE WHEN yw BETWEEN 60 AND 89 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[语文低分率]=LTRIM(CAST(100.0*COUNT(CASE WHEN yw BETWEEN 0 AND 59 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[数学优秀率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [sx] BETWEEN 90 AND 100 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[数学及格率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [sx] BETWEEN 60 AND 89 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[数学低分率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [sx] BETWEEN 0 AND 59 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[英语优秀率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [wy] BETWEEN 90 AND 100 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[英语及格率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [wy] BETWEEN 60 AND 89 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[英语低分率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [wy] BETWEEN 0 AND 59 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[物理优秀率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [zf] BETWEEN 90 AND 100 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[物理及格率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [zf] BETWEEN 60 AND 89 THEN 1 END)/COUNT(1) AS FLOAT)) + '%',
	[物理低分率]=LTRIM(CAST(100.0*COUNT(CASE WHEN [zf] BETWEEN 0 AND 59 THEN 1 END)/COUNT(1) AS FLOAT)) + '%'
from #temp
GROUP BY [xxmc]
/*
xxmc	语文优秀率	语文及格率	语文低分率	数学优秀率	数学及格率	数学低分率	英语优秀率	英语及格率	英语低分率	物理优秀率	物理及格率	物理低分率
十六中	0%	100%	0%	100%	0%	0%	100%	0%	0%	0%	100%	0%
一中	0%	50%	50%	50%	50%	0%	0%	0%	100%	0%	100%	0%
*/
nangangshi 2013-08-26
  • 打赏
  • 举报
回复
表结构少了一个中学字段,应该为
xm xb xxmc yw sx wy zf
张三 男 一中 60 80 59 68
李四 女 一中 56 99 56 68
王五 男 十六中 88 91 98 68
。。。。。。
nangangshi 2013-08-26
  • 打赏
  • 举报
回复
表结构为
xm xb yw sx wy zf
张三 男 60 80 59 68
李四 女 56 99 56 68
王五 男 88 91 98 68
........
唐诗三百首 2013-08-26
  • 打赏
  • 举报
回复
LZ最好给出表结构才好写SQL喔.
Andy__Huang 2013-08-26
  • 打赏
  • 举报
回复
select 科目,优秀率=SUM(case when 成绩 between 90 and 100 then 1 else 0 end)/COUNT(1),
	及格率=SUM(case when 成绩 between 60 and 89 then 1 else 0 end)/COUNT(1),
	低分率=SUM(case when 成绩 between 0 and 29 then 1 else 0 end)/COUNT(1)
from tb
group by 科目

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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