2012-02-09 4 views
5

私は2回以上出現するdistinct device_typeの行数を返すクエリを持っています。 「他人の1回だけ発生する行をどのように集計できますか?

がどのように私は、以下のための第二の列としてCOUNT(*)と「その他」の合計を追加することができるよう

SELECT COUNT(*) AS C1,device_type FROM stat 
    WHERE stat_date = '2012-02-08' 
    GROUP BY 2 HAVING C1 > 1 
    ORDER BY 1 DESC 

私は残りの(HAVING回数= 1)の行を要約したいと思いますクエリ?私はこれを行うだろうDB

SELECT COUNT(*) AS C2,device_type FROM stat 
    WHERE stat_date = '2012-02-08' 
    GROUP BY 2 HAVING C2 = 1 
    ORDER BY 1 DESC 

サンプル・データ

device_type 
dt1 
dt1 
dt1 
dt2 
dt2 
dt3 
dt4 
dt5 

期待される結果

3 dt1 
2 dt2 
3 other 
+0

は(条件)GROUPBY DEVICE_TYPEのstatからのu 'DEVICE_TYPEのSELECT 'DEVTYPE'、COUNT(*)「他の人が他人を持つためではない、この作業を行います> 1' – Deeptechtons

答えて

3

また、試すことができます。

SELECT SUM(C1) AS C1, CASE WHEN C1 = 1 THEN 'other' ELSE device_type END as device_type 
FROM ( SELECT COUNT(*) AS C1, 
       device_type 
     FROM stat 
     WHERE stat_date = '2012-02-08' 
     GROUP BY device_type) A 
GROUP BY CASE WHEN C1 = 1 THEN 'other' ELSE device_type END 
+0

私はこれと同じ考え方でした。外側のselectとgroup byの両方で "if(C1 = 1、 'others'、device_type)"のcase構文を置き換えただけです。 –

4

SELECT COUNT(*) AS C1,device_type FROM stat 
    WHERE stat_date = '2012-02-08' 
    GROUP BY 2 HAVING C1 > 1 
    ORDER BY 1 DESC 
Union 

SELECT Sum(1),'OTHERS'FROM stat 
    WHERE stat_date = '2012-02-08' 
    GROUP BY 2 HAVING C1 =1 
    ORDER BY 1 DESC 
+1

これ以外は機能しません。 2回目の選択でカウントを実行する前に合計を適用することはできません。 –

関連する問題