2012-04-05 19 views
5

私は以下のような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

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; 
関連する問題