2017-08-25 7 views
1

0から10秒、0から20秒など一定の範囲内で応答されたコールをカウントする必要があります。デルタは異なるカウント現在と次の間。 %は現在のカウント/最終カウントの合計になります。ここで特定の範囲内でカウントされたコールのカウント0〜10秒、グループによるカウント

はあなたがテストのためのデータを使用することができますsqlfiddleです:callsdetailsのhttp://sqlfiddle.com/#!9/803d2/2

サンプルテーブル:

+-----+----------------+----------+----------+---------------+ 
| id | callid   | callerno | duration | status  | 
+-----+----------------+----------+----------+---------------+ 
| 634 | 1479097551.228 | 1000  |  2 | complete  | 
| 635 | 1479102518.248 | 1000  |  12 | complete  | 
+-----+----------------+----------+----------+---------------+ 

期待される結果:私は作成することができています何

+------------------------+----------+----------+----------+ 
| Ranges     | Count | Delta | %  | 
+------------------------+----------+----------+----------+ 
| Between 0 to 10 secs |  44 | +44  | 84.62 % | 
| Between 0 to 20 secs |  48 | +4  | 92.31 % | 
| Between 0 to 30 secs |  50 | +2  | 96.15 % | 
| Between 0 to 40 secs |  51 | +1  | 98.08 % | 
| Between 0 to 50 secs |  51 | +0  | 98.08 % | 
| Between 0 to 60 secs |  51 | +0  | 98.08 % | 
| Between 0 to 70 secs |  51 | +0  | 98.08 % | 
| Between 0 to 80 secs |  52 | +1  | 100.00 % | 
| Between 0 to 90 secs |  52 | +0  | 100.00 % | 
| Between 0 to 100+ secs |  52 | +0  | 100.00 % | 
+------------------------+----------+----------+----------+ 
Total       52 

あなたがより良い解決策を提供するのを助けることができるならば、今質問の下にあります、アドバイスをしてください。私が今直面している問題は(優先度)私はカウントを得ることができません、そして(副)%の最終的な合計の合計(52)、今私は手作業で最終的な合計(52)を入れました。助けてください。

SELECT Ranges,Delta,ROUND(Delta/52*100,2) AS '%' 
FROM 
(
    SELECT 
    (
     IF(duration<=10,'10',IF(duration<=20,'20',IF(duration<=30,'30', 
     IF(duration<=40,'40',IF(duration<=50,'50', 
     IF(duration<=60,'60',IF(duration<=70,'70',IF(duration<=80, 
     '80',IF(duration<=90,'90','100+')))))))))) 
     AS Ranges,COUNT(duration) AS Delta 
     FROM callsdetails 
     GROUP BY Ranges 
    ) a 
GROUP BY Ranges; 

現在の結果:

+--------+-------+-------+ 
| Ranges | Delta | %  | 
+--------+-------+-------+ 
| 10  | 44 | 84.62 | 
| 20  |  4 | 7.69 | 
| 30  |  2 | 3.85 | 
| 40  |  1 | 1.92 | 
| 80  |  1 | 1.92 | 
+--------+-------+-------+ 
+0

あなたは 'UNION'だけ底までの総数を計ることができます。元のテーブルはどのように見えますか? – RealCheeseLord

+0

元のテーブルを参照するために上記のサンプルテーブルを追加しました。お知らせ下さい。 – DarkSilver

答えて

0

私はあなたの問題を理解するならば、あなただけのROLLUPは、MySQL

クエリ

SELECT Ranges,Delta,ROUND(Delta/52*100,2) AS '%' 
FROM 
(
SELECT 
(
IF(duration<=10,'10',IF(duration<=20,'20',IF(duration<=30,'30', 
IF(duration<=40,'40',IF(duration<=50,'50', 
IF(duration<=60,'60',IF(duration<=70,'70',IF(duration<=80, 
'80',IF(duration<=90,'90','100+')))))))))) 
AS Ranges,COUNT(duration) AS Delta 
FROM callsdetails 
GROUP BY Ranges 
) a 
GROUP BY Ranges WITH ROLLUP; 

FOR MORE REFERENCE

で目的球をグループ化したいです
+0

こんにちはデニー、情報ありがとう。上記の「現在の結果」を見て、「計数」をどのようにして「期待される結果」のように各範囲で増加させるかを、どのように追加すればよいのでしょうか? クエリを実行すると、1行下に新しい行が追加されます。 | NULL | 1 | 1.92 | また、合計を表示するためにのみROLLUPを使用できますか?私は%の値を使用できませんか? %は現在のカウント/最終的なカウントの合計です。 もう一度お手数をおかけしていただき、ありがとうございました。 – DarkSilver

+0

私にsqlfiddleを与えなさい – denny

+0

こんにちはデニー、ここにsqlfiddleがある。 http://sqlfiddle.com/#!9/803d2/1より良い解決策があれば教えてください。ご協力いただきありがとうございます。 – DarkSilver

関連する問題