2012-02-09 5 views
5

Ho una query che restituisce il numero di righe di un device_type distinto che si verificano più di una volta.Come posso riepilogare le righe che si verificano una sola volta?

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

vorrei riassumere i (count = 1 visto) le righe rimanenti come 'altri'

Come posso aggiungere la somma di COUNT (*) e 'altri' come seconda colonna per la seguente interrogare?

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

dati di esempio in DB

device_type 
dt1 
dt1 
dt1 
dt2 
dt2 
dt3 
dt4 
dt5 

risultato atteso

3 dt1 
2 dt2 
3 other 
+0

non fa questo lavoro per u 'SELEZIONA DEVICE_TYPE 'DEVTYPE', COUNT (*) 'altri' da stat dove (condizione) GroupBy DEVICE_TYPE con gli altri> 1' – Deeptechtons

risposta

3

Si può anche provare:

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

Ero sulla stessa linea di pensiero come questo; ho appena sostituito la sintassi del caso con "if (C1 = 1, 'others', device_type)" sia nella selezione esterna che nel gruppo per. –

4

farei questo.

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

Tranne che questo non funziona. Non è possibile applicare la somma prima di aver eseguito il conteggio nella seconda selezione. –

Problemi correlati