2012-04-05 3 views
5

i는 아래 예와 같이 MySQL은 테이블 t_points있다.방법 MySQL의 테이블에서 범위의 개수를 선택?

Name   Surname   Point 
Joe   Arnold   120 
Michale  Black   250 
Masha   Petrova   300 
Natalie  Jackson   120 
John   Turo    200 
Bona   Meseda   250 
Zeyda   Nura    150 
Zanura  Bohara   60 
Shaheen  Boz    360 
Abbas   Murat   160 
Keira   Black   230 
Tom   Robinson   480 
Fred   Balka   490 
Semia   Hudovi   90 
Sona   Bahari   60 

포인트 범위의 수를 표시하는 쿼리를 작성하고 싶습니다. 포인트 범위는 다음과 같습니다 : 포인트 0, 100, 101, 200, 201, 300, 301 및 400 사이의 결과는 내가 u는 내가하고 싶은 말을 이해 생각

0_100   101_200   201_300   301_400 
3    5    4     3 

아래처럼해야합니다. 그래서 어떤 쿼리를이 결과에 사용해야합니까?
감사합니다. 그런

+0

점에 대한 원거리 상단은 무엇입니까? 당신이 추가됩니다 – gbn

답변

11
select 
    count(CASE WHEN point BETWEEN 0 AND 100 THEN 1 END) as count0_100, 
    count(CASE WHEN point BETWEEN 101 AND 200 THEN 1 END) as count101_200, 
    count(CASE WHEN point BETWEEN 201 AND 300 THEN 1 END) as count201_300, 
    ... 
from 
    t_poits 
+0

얼마나 이러한 문자열은? :) 아래의 보편적 인 솔루션을 참조하십시오. – user1303559

1

뭔가 :

select count(*) as count, abs(point/100) as range 
from t_poits 
group by abs(point/100) 
0
select 
    concat(floor(Point/100),'01_',ceil(Point/100),'00') as ind, 
    count(*) as cnt 
    from t group by ind order by ind asc; 
1

당신이 할 수있는 그룹 포인트 열 및 범위를 지정하는 몇 가지 수학 연산을한다. 이를 바탕으로 레코드 수를 계산할 수 있습니다.

처럼 ..

SELECT concat(101 * round(Point /101) , '-', 101 * round(Point /101) +100) AS `range` , count(*) AS `result` 
FROM t_points 
GROUP BY 1 
ORDER BY Point 

나는 당신을 위해 작동합니다 바랍니다.

1

세트 @range = 500;

select floor(field1/@range)*@range as `from`,(ceil(field1/@range)+if(mod(field1,@range)=0,1,0))*@range as `to`, count(field1) 
from table1 
group by 1,2 
order by 1,2; 
관련 문제