2012-02-09 33 views
5

我有一个查询返回不止一次出现的不同device_type的行数。如何汇总只出现一次的行?

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

我想剩下的(具有计数= 1)行概括为“其他”

如何添加COUNT的总和(*)和“其他”作为接下来的第二列查询?在DB

device_type 
dt1 
dt1 
dt1 
dt2 
dt2 
dt3 
dt4 
dt5 

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

的样本数据预期的结果

3 dt1 
2 dt2 
3 other 
+0

没有这个工作ü'SELECT DEVICE_TYPE 'DEVTYPE',COUNT(*) '其他' 从统计在具有其他(条件)的GroupBy DEVICE_TYPE> 1' – Deeptechtons 2012-02-09 12:49:21

回答

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

我和这一点在同一思路上;只是在外部选择和分组依据中用“if(C1 = 1,'others',device_type)”替换了大小写语法。 – 2012-02-09 12:56:24

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

除此之外不起作用。在第二次选择完成计数之前,您无法应用总和。 – 2012-02-09 13:01:50