2012-02-09 14 views
5

Tengo una consulta que devuelve el número de filas de un device_type distintivo que se producen más de una vez.¿Cómo puedo resumir las filas que ocurren solo una vez?

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

me gustaría resumir los (= 1 cargo QUE TIENEN) filas restantes como

¿Cómo puedo añadir la suma de COUNT (*) y 'otros' 'otros' como la segunda columna de la siguiente ¿consulta?

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

datos de la muestra en el PP

device_type 
dt1 
dt1 
dt1 
dt2 
dt2 
dt3 
dt4 
dt5 

resultado esperado

3 dt1 
2 dt2 
3 other 
+0

no funciona esto para u 'tipo_dispositivo SELECT 'DEVTYPE', COUNT (*) 'otros' a partir de estadísticas donde (condición) GroupBy tipo_dispositivo tener otros> 1' – Deeptechtons

Respuesta

3

También puede probar:

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

Estaba en la misma línea de pensamiento que esto; simplemente reemplazó la sintaxis del caso con "if (C1 = 1, 'otros', tipo_de_dispositivo)" tanto en la selección externa como en el grupo por. –

4

Me gustaría hacer esto.

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

Excepto que esto no funciona. No puede aplicar la suma antes de haber realizado el conteo en la segunda selección. –

Cuestiones relacionadas