2016-06-29 8 views
0

私は、ユーザーの訪問時間を分単位で表示するテーブルを持っています。私はグループに分値探しています - 10によってインクリメントバケット内に、などのように、各バケット内の項目数を数える:最大分の値にグループmysqlの設定値で

duration(minutes) count 
0     20 
10     400 
20     1400 
30     100 

すべての方法を。

duration(minutes)  count 
0 - 10     20 
11 - 20    400 
21 - 30    1400 
31 - 40    100 
etc 

ないか、このためのセットアップmysqlのクエリをしてください:それは本当にこのようなものであるので、期間バケットのために示されている値は、バケットの上限値を表しています。

+0

を丸めることができます。 – Uueerdo

答えて

0

あなたは常に計算結果のグループが、この場合には、このようなものが適当であろうことができます:0-10 10-20重複をオーバーラップするよう

SELECT 10 * ((mins-1) DIV 10) AS groupVal, COUNT(*) 
FROM theTable 
GROUP BY groupVal 
; 

はしかし、あなたの範囲は、ややあいまいです20-30など。クエリのグループ化の意図は、クエリのようにもっと明確になるかもしれません...

SELECT CASE 
    WHEN mins >= 0 AND mins <= 10 THEN 0 
    WHEN mins > 10 AND mins <= 20 THEN 10 
    WHEN mins > 20 AND mins <= 30 THEN 20 
    WHEN mins > 30 AND mins <= 40 THEN 30 
    ELSE -1 
    END AS groupVal 
, COUNT(*) 
FROM theTable 
GROUP BY groupVal 
; 

これらはMySQLで動作するはずです。 MS SQLを使用している場合は、GROUP BY句で別名groupValを使用することはできません。代わりに、最初の例の計算を複製するか、2番目の例の計算全体をCASE ... ENDに複製する必要があります。

0

あなたは分裂し、その結果、あなたの更新の範囲で、私は私の答えを更新し

SELECT TRUNCATE(duration/10, 0) * 10 as duration(minutes), count(*) as `count` 
FROM table 
GROUP BY TRUNCATE(duration/10, 0) 
; 
+0

この方法で範囲はどのように見えますか?それらは重なりますか? (以下のコメントのように?)。私は元の質問を編集して、範囲がどのように見えるかを示しました。 – user2022284

+0

@ user2022284これは、範囲が「0は0-9」、「10は10から19」などと答えています。また、 'duration(minutes)'エイリアスは、おそらく解析問題を防ぐためにエスケープする必要があります。 – Uueerdo

関連する問題