注册 登录
编程论坛 SQL Server论坛

数据统计

wty200800720 发布于 2016-05-12 14:56, 4808 次点击
请教下,没学过sql我想问下,我这有1万个考生,每个考生有个总成绩,要求以20分段,统计考生人数怎么统计啊?
11 回复
#2
mywisdom882016-05-12 16:44
没明白你意思,你的应该不难
#3
wty2008007202016-05-19 14:09
回复 2楼 mywisdom88
就是比如有1万个考生
总分为700
那么就是总分大于等于680小于等于700有多少人
            大于等于660小于等于680有多少人
            大于等于640小于等于660有多少人
以此类推20分一个分数段的人数。
        
#4
mywisdom882016-05-19 16:19
--create table #成绩(学号 varchar(10),姓名 varchar(10),数学 numeric(5,2),语文 numeric(5,2),英语 numeric(5,2),总分 numeric(5,2))
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00001','张三',90.50,100,88.5,700)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00002','张三',90.50,100,88.5,685)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00003','张三',90.50,100,88.5,680)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00004','张三',90.50,100,88.5,665)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00005','张三',90.50,100,88.5,660)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00006','张三',90.50,100,88.5,645)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00007','张三',90.50,100,88.5,650)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00007','张三',90.50,100,88.5,640)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00008','张三',90.50,100,88.5,625)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00009','张三',90.50,100,88.5,620)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00010','张三',90.50,100,88.5,605)
--insert into #成绩(学号,姓名,数学,语文,英语,总分) values('00011','张三',90.50,100,88.5,600)
select sum(case when 总分>=680 and  总分<=700 then 1 else 0 end)as [680分],
       sum(case when 总分>=660 and  总分<=680 then 1 else 0 end)as [660分],
       sum(case when 总分>=640 and  总分<=660 then 1 else 0 end)as [640分],
       sum(case when 总分>=620 and  总分<=640 then 1 else 0 end)as [620分],
       sum(case when 总分>=500 and  总分<=520 then 1 else 0 end)as [500分]

 from #成绩
当然,你成绩表,要是有班级,年级的,还可以用班级,年级来分类统计

[此贴子已经被作者于2016-5-19 16:21编辑过]

#5
wty2008007202016-05-19 19:29
回复 3楼 wty200800720
我的成绩表只有姓名和总分,
只需要统计个分数段人数就行,你这个太复杂我看不懂也不会用啊朋友
#6
hu9jj2016-05-19 19:50
以下是引用wty200800720在2016-5-19 19:29:41的发言:

我的成绩表只有姓名和总分,
只需要统计个分数段人数就行,你这个太复杂我看不懂也不会用啊朋友

你将表结构附上,大家才好帮你写代码。
#7
wty2008007202016-05-19 20:10
只有本站会员才能查看附件,请 登录
#8
wty2008007202016-05-19 20:11
只有本站会员才能查看附件,请 登录
#9
mywisdom882016-05-20 20:46
--sql2000测试数据,#成绩,表名前面带#,是临时表的意思
create table #成绩(姓名 varchar(10),总分 numeric(5,2))
insert into #成绩(姓名,总分) values('张三01',700)
insert into #成绩(姓名,总分) values('张三02',690)
insert into #成绩(姓名,总分) values('张三03',680)
insert into #成绩(姓名,总分) values('张三04',670)
insert into #成绩(姓名,总分) values('张三05',660)
insert into #成绩(姓名,总分) values('张三06',650)
insert into #成绩(姓名,总分) values('张三07',640)
insert into #成绩(姓名,总分) values('张三08',630)
insert into #成绩(姓名,总分) values('张三09',620)
insert into #成绩(姓名,总分) values('张三10',600)
insert into #成绩(姓名,总分) values('张三11',590)
insert into #成绩(姓名,总分) values('张三12',580)
insert into #成绩(姓名,总分) values('张三13',570)
insert into #成绩(姓名,总分) values('张三14',560)
insert into #成绩(姓名,总分) values('张三15',550)
insert into #成绩(姓名,总分) values('张三16',540)
insert into #成绩(姓名,总分) values('张三17',530)
insert into #成绩(姓名,总分) values('张三18',520)
insert into #成绩(姓名,总分) values('张三19',510)
insert into #成绩(姓名,总分) values('张三20',500)
insert into #成绩(姓名,总分) values('张三21',490)
--以上都是测试数据,以下是查询
select sum(case when 总分>=680 and  总分<=700 then 1 else 0 end)as [680分],
       sum(case when 总分>=660 and  总分<=680 then 1 else 0 end)as [660分],
       sum(case when 总分>=640 and  总分<=660 then 1 else 0 end)as [640分],
       sum(case when 总分>=620 and  总分<=640 then 1 else 0 end)as [620分],
       sum(case when 总分>=600 and  总分<=620 then 1 else 0 end)as [600分],
       sum(case when 总分>=580 and  总分<=600 then 1 else 0 end)as [580分],
       sum(case when 总分>=560 and  总分<=580 then 1 else 0 end)as [560分],
       sum(case when 总分>=540 and  总分<=560 then 1 else 0 end)as [540分],
       sum(case when 总分>=520 and  总分<=540 then 1 else 0 end)as [520分],
       sum(case when 总分>=500 and  总分<=520 then 1 else 0 end)as [500分],
       sum(case when 总分>=480 and  总分<=500 then 1 else 0 end)as [480分]
 from #成绩
-- 一直 sum(case when 总分>=300 and  总分<=320 then 1 else 0 end)as [300分]到你20个分类

#10
mywisdom882016-05-20 20:49
回复 9楼 mywisdom88
**如果是你VPF环境测试
create cursor 成绩(姓名 C(10),总分 N(3,2))
insert into 成绩(姓名,总分) values('张三01',700)
insert into 成绩(姓名,总分) values('张三02',690)
insert into 成绩(姓名,总分) values('张三03',680)
insert into 成绩(姓名,总分) values('张三04',670)
insert into 成绩(姓名,总分) values('张三05',660)
insert into 成绩(姓名,总分) values('张三06',650)
insert into 成绩(姓名,总分) values('张三07',640)
insert into 成绩(姓名,总分) values('张三08',630)
insert into 成绩(姓名,总分) values('张三09',620)
insert into 成绩(姓名,总分) values('张三10',600)
insert into 成绩(姓名,总分) values('张三11',590)
insert into 成绩(姓名,总分) values('张三12',580)
insert into 成绩(姓名,总分) values('张三13',570)
insert into 成绩(姓名,总分) values('张三14',560)
insert into 成绩(姓名,总分) values('张三15',550)
insert into 成绩(姓名,总分) values('张三16',540)
insert into 成绩(姓名,总分) values('张三17',530)
insert into 成绩(姓名,总分) values('张三18',520)
insert into 成绩(姓名,总分) values('张三19',510)
insert into 成绩(姓名,总分) values('张三20',500)
insert into 成绩(姓名,总分) values('张三21',490)
**以上都是测试数据,以下是查询
select sum(IIF( 总分>=680 and  总分<=700,1,0))as [总分680],;
       sum(iif( 总分>=660 and  总分<=680,1,0))as [总分660],;
       sum(iif( 总分>=640 and  总分<=660,1,0))as [总分640],;
       sum(iif( 总分>=620 and  总分<=640,1,0))as [总分620],;
       sum(iif( 总分>=600 and  总分<=620,1,0))as [总分600],;
       sum(iif( 总分>=580 and  总分<=600,1,0))as [总分580],;
       sum(iif( 总分>=560 and  总分<=580,1,0))as [总分560],;
       sum(iif( 总分>=540 and  总分<=560,1,0))as [总分540],;
       sum(iif( 总分>=520 and  总分<=540,1,0))as [总分520],;
       sum(iif( 总分>=500 and  总分<=520,1,0))as [总分500],;
       sum(iif( 总分>=480 and  总分<=500,1,0))as [总分480] ;
 from 成绩
** 一直 sum(iif( 总分>=480 and  总分<=500,1,0))as [总分480] 到你20个分类
**你在SQL数据库上问,我们一般就用SQL数据库的语法写,但看到你表,才知道你在VFP上。

[此贴子已经被作者于2016-5-20 21:00编辑过]

#11
wty2008007202016-05-21 15:42
回复 10楼 mywisdom88
谢谢
#12
wty2008007202016-05-23 22:38
回复 10楼 mywisdom88
谢谢哈,非常感谢
1