日期:2014-05-18  浏览次数:20545 次

求助:用一条sql语句实现这样的分组查询
表如下 
name grade 
---------- 
a1 45 
a2 50 
a3 54 
a4 65 
a5 66 
a6 77 
a7 89 
a8 80 
a9 91 
a10 90 
a11 100 

用一条sql语句查询grade在60以下,60~69、70~79、80~89、90~100的人数各有多少! 
要显示如下效果: 
scale count 
—————————— 
60以下 3 
60~69 2 
70~79 1 
80~89 2 
90~100 3 
和以下效果: 
60以下 60~69 70~79 80~89 90~100 
—————————————————————————— 
3 2 1 2 3

------解决方案--------------------
select '60以下',count(*) from ha where grade <60
union all
select '60-69',count(*) from ha where grade between 60 and 69
union all
select '70-79',count(*) from ha where grade between 70 and 79
union all
select '80-89',count(*) from ha where grade between 80 and 89
union all
select '90-100',count(*) from ha where grade between 90 and 100

select '60以下'=(select count(*) from ha where grade <60),
'60-69'=(select count(*) from ha where grade between 60 and 69),
'70-79'=(select count(*) from ha where grade between 70 and 79),
'80-89'=(select count(*) from ha where grade between 80 and 89),
'90-100'=count(*) from ha where grade between 90 and 100

自己该字段和表名
------解决方案--------------------
SQL code

declare @t table(name varchar(20),grade int)
insert @t select 'a1',45
insert @t select 'a2',50
insert @t select 'a3',54
insert @t select 'a4',65
insert @t select 'a5',66
insert @t select 'a6',77
insert @t select 'a7',89
insert @t select 'a8',80
insert @t select 'a9',91
insert @t select 'a10',90
insert @t select 'a11',100
select '60以下'=(select count(name) from 
(select * from @t where grade <60) t ),
'60~69'=(select count(name) from 
(select * from @t where grade <69 and grade>60) t ),
'70~79'=(select count(name) from 
(select * from @t where grade <79 and grade>70) t ),
'80~89'=(select count(name) from 
(select * from @t where grade <89 and grade>80) t ),
'90~100'=(select count(name) from 
(select * from @t where grade <100 and grade>90) t )
/*
(1 row(s) affected)
60以下        60~69       70~79       80~89       90~100
----------- ----------- ----------- ----------- -----------
3           2           1           0           1

(1 row(s) affected)
*/