Ho una tabella che appare un po 'come questo:SQL - contando le righe con valore specifico
id value
1 0
1 1
1 2
1 0
1 1
2 2
2 1
2 1
2 0
3 0
3 2
3 0
Ora, per ogni id
, voglio contare il numero di occorrenze di 0 e 1 e il numero di occorrenze per che ID (il valore può essere qualsiasi numero intero), in modo che il risultato finale dovrebbe essere simile a questo:
id n0 n1 total
1 2 2 5
2 1 2 4
3 2 0 3
sono riuscito ad ottenere la prima e l'ultima fila con questa affermazione:
SELECT id, COUNT(*) FROM mytable GROUP BY id;
Ma io sono un po 'perso da qui. Qualche suggerimento su come ottenere questo senza un'enorme affermazione?
Dolce, non sapevo nemmeno che esistesse un 'SUM (condizione)'! – ryyst
@ryyst: Beh, è un trucco che sfrutta il fatto che MySQL valuta i risultati booleani delle espressioni condizionali a 0 se falso e 1 se vero; quindi prendere il 'SUM' su ogni gruppo fornisce un conteggio di quei record in cui la condizione è vera. – eggyal
Puoi anche essere più espressivo e usare 'COUNT (CASE WHEN value = 0 THEN 1 END) AS n0, ..., ...', che funzionerà in tutti gli altri principali DBMS dato che MySQL è l'unico a rendere implicito conversioni booleane. Vedi la mia [domanda qui] (http://stackoverflow.com/questions/11340540/conditional-counting-performance-differences-in-using-sum-vs-count) per ulteriori informazioni. –