求一SQL语句

dacsd 2005-04-22 09:00:16
现有一表,其结构如下:
班级 姓名 成绩
A 张三 89
B 里斯 75
A 王五 63
B 找刘 93
C 理亏 66
......


希望得到的统计结果:
班级 成绩<60人数 成绩<60总分 成绩60至80人数 成绩60至80总分 成绩81至100人数 成绩81至100总分







...全文
89 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dacsd 2005-04-22
  • 打赏
  • 举报
回复
谢谢各位
paoluo 2005-04-22
  • 打赏
  • 举报
回复

--建立测试环境
Create table 表
(班级 Varchar(10),
姓名 Nvarchar(10),
成绩 Int)
--插入数据
Insert 表 Values('A', N'张三', 89)
Insert 表 Values('B', N'里斯', 75)
Insert 表 Values('A', N'王五', 63)
Insert 表 Values('B', N'找刘', 93)
Insert 表 Values('C', N'理亏', 66)
--测试
Select
班级,
(Select IsNull(Count(*),0) from 表 Where 成绩<60 And 班级=A.班级) As N'成绩<60人数',
(Select IsNull(SUM(成绩),0) from 表 Where 成绩<60 And 班级=A.班级) As N'成绩<60总分',
(Select IsNull(Count(*),0) from 表 Where 成绩<=80 And 成绩>=60 And 班级=A.班级) As N'成绩60至80人数',
(Select IsNull(SUM(成绩),0) from 表 Where 成绩<=80 And 成绩>=60 And 班级=A.班级) As N'成绩60至80总分',
(Select IsNull(Count(*),0) from 表 Where 成绩<=100 And 成绩>80 And 班级=A.班级) As N'成绩81至100人数',
(Select IsNull(SUM(成绩),0) from 表 Where 成绩<=100 And 成绩>80 And 班级=A.班级) As N'成绩81至100总分'
from 表 A
Group By 班级
Order By 班级
--删除测试环境
Drop table 表
--结果
/*
班级 成绩<60人数 成绩<60总分 成绩60至80人数 成绩60至80总分 成绩81至100人数 成绩81至100总分
A 0 0 1 63 1 89
B 0 0 1 75 1 93
C 0 0 1 66 0 0
*/
paoluo 2005-04-22
  • 打赏
  • 举报
回复
楼上几位哥们的思路是对的,但是语句全部都没能写正确,测试看看就知道了。
hsj20041004 2005-04-22
  • 打赏
  • 举报
回复
select 班级 ,sum(case when 成绩<=60 then 1 else 0 end ) as '成绩<60人数',
sum(case when 成绩<=60 and then 成绩 else 0 end ) as '成绩<60总分',
sum(case when 60<成绩<=80 and then 1 else 0 end ) as '成绩60至80人数',
sum(case when 60<成绩<=80 and then 成绩 else 0 end ) as '成绩60至80总分,
sum(case when 81<成绩<=100 and then 1 else 0 end ) as '成绩81至100人数,
sum(case when 81<成绩<=100 and then 成绩 else 0 end ) as '成绩81至100总分'
from table
group by 班级
Navywang917 2005-04-22
  • 打赏
  • 举报
回复
select 班级,sum(case when 成绩<60 then 1 else 0 end) as 成绩<60人数
,sum(case when 成绩<60 then 成绩 else 0 end) as 成绩<60总分
,sum(case when 成绩 between 60 and 80 then 1 else 0 end) as 成绩60至80人数
,sum(case when 成绩 between 60 and 80 then 成绩 else 0 end) as 成绩60至80总分
,sum(case when 成绩 between 81 and 100 then 1 else 0 end) as 成绩81至100人数
,sum(case when 成绩 between 81 and 100 then 成绩 else 0 end) as 成绩81至100总分
from yourtable group by 班级
xiaomeixiang 2005-04-22
  • 打赏
  • 举报
回复
select 班级,sum(case when 成绩<60 then 1 else 0 end) as 成绩<60人数
,sum(case when 成绩<60 then 成绩 else 0 end) as 成绩<60总分
,sum(case when 成绩 between 60 and 80 then 1 else 0 end) as 成绩60至80人数
,sum(case when 成绩 between 60 and 80 then 成绩 else 0 end) as 成绩60至80总分
,sum(case when 成绩 between 81 and 100 then 1 else 0 end) as 成绩81至100人数
,sum(case when 成绩 between 81 and 100 then 成绩 else 0 end) as 成绩81至100总分
from yourtable group by 班级
lxysjl 2005-04-22
  • 打赏
  • 举报
回复
上面的应该是你想要的结果
wyb0026 2005-04-22
  • 打赏
  • 举报
回复
select 班级 ,sum(case when 成绩<60 then 1 else 0 end )
,sum(case when 成绩<60 and then 成绩 else 0 end )
.....
from table
group by 班级

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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