2013-10-02 2 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 카운트 간격을 그리워 할 때 CASE를 사용할 수 있습니다. 그래서 당신은 다음과 같은 방법으로 작업을 수행 할 수 있습니다

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