2013-10-02 140 views
1

我有一张表,列出了测试的分数列表,例如可以说分数为30。按组百分比增加的SQL组

我想通过计算得分在一定百分比范围内的人数来呈现数据。

例如:

Total % Bracket 
----------------- 
5  95-100% 
15  90-94% 
20  85-89% 
17  80-84% 
15  75-79% 
etc 

我想到了第一次计算每个百分比支架所需的分数,然后做一个SUM(CASE ....莫名其妙,但我似乎迷路了。

+0

你能分享预期的结果的例子吗? – Kuzgun

+0

@Kuzgun我有它的问题。我想要统计一定百分比范围内的总人数 –

+0

您正在使用哪个数据库? – Kuzgun

回答

1

没有时间来测试这一点,但东西长的线..

select t.pcbracket as [% Bracket], count(*) as [NumWithMark] 
from (
    select case 
    when mark between 0 and 9 then ' 0- 9' 
    when mark between 10 and 19 then '10-19' 
    when mark between 20 and 29 then '20-29' 
    when mark between 30 and 39 then '30-39' 
    else '40-100' end as pcbracket 
    from testresults) t 
group by t.pcbracket 
+0

谢谢,这让我走上正轨,只需将分数转换成一个百分比,然后使用你的方法。 –

0

我会用嵌套查询来解决这个问题。 内部查询我会使用简单的百分比组,然后在它上面我会使用大小写来指定百分比范围并获得输出。

1

可以应用情况,但在这种情况下,你会错过的间隔记录0计数。所以,你可以做到这一点通过以下方式:

select t2.start,t2.finish, count(t.score) from t 
RIGHT JOIN 
(
select 0 as start, 4 as finish 
union all 
select 5 as start, 9 as finish 
union all 
select 10 as start, 14 as finish 
union all 
....... 
union all 
select 95 as start, 99 as finish 
) as t2 on t.score between t2.start and t2.finish 

group by t2.start,t2.finish 
order by t2.start 

Here is SQLFiddle demo