2012-04-05 9 views
5

tôi có một bảng t_points trong mySql như ví dụ dưới đây.cách chọn Đếm Phạm vi từ bảng 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 

tôi muốn viết truy vấn sẽ hiển thị số lượng phạm vi điểm. dãy điểm là như thế này: điểm từ 0 đến 100, 101 và 200, 201 và 300, 301 và 400. Kết quả phải như dưới đây

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

tôi nghĩ rằng u hiểu những gì tôi muốn nói. Vì vậy, tôi phải sử dụng truy vấn nào cho kết quả này?
Cảm ơn.

+0

Điểm trên được tính cho điểm số là bao nhiêu? – gbn

Trả lời

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

và bạn sẽ thêm bao nhiêu chuỗi? :) Xem giải pháp phổ quát bên dưới. – user1303559

1

Something như thế:

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

Bạn có thể điểm nhóm cột và thực hiện một số hoạt động toán học để xác định phạm vi. Dựa trên đó bạn có thể đếm số lượng hồ sơ.

Giống như ..

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 

Tôi hy vọng nó sẽ làm việc cho bạn.

1

set @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;