Data:SQL per contare gli intervalli con il gruppo-by e comprendono 0 conta
table 'thing':
age
---
3.4
3.4
10.1
40
45
49
voglio contare il numero di cose che per ogni intervallo di 10 anni, ad esempio,
age_range | count
----------+-------
0 | 2
10| 1
20| 0
30| 0
40| 3
Questa interrogazione si avvicina:
SELECT FLOOR(age/10) as age_range, COUNT(*)
FROM thing
GROUP BY FLOOR(age/10) ORDER BY FLOOR(age/10);
uscita:
age_range | count
-----------+-------
0 | 1
1 | 2
4 | 3
Tuttavia, non mi mostra gli intervalli che hanno 0 conteggi. Come posso modificare la query in modo che mostri anche gli intervalli tra 0 conteggi?
Ho trovato domande di stackoverflow simili per il conteggio degli intervalli, alcuni per i conteggi 0, ma comportano la necessità di specificare ciascun intervallo (o hard-coding degli intervalli nella query o inserimento degli intervalli in una tabella). Preferirei utilizzare una query generica come quella precedente, in cui non è necessario specificare esplicitamente ciascun intervallo (ad esempio, 0-10, 10-20, 20-30, ...). Sto usando PostgreSQL 9.1.3.
C'è un modo per modificare la query semplice sopra per includere 0 conteggi?
analogo:
Oracle: how to "group by" over a range?
Get frequency distribution of a decimal range in MySQL
Che bello. Buona funzione da sapere. – Glenn
Risposta elegante, @mu_is_too_short! L'ho provato e ha funzionato. Proprio quello che stavo cercando. Grazie! –
@Glenn: Sì, 'generate_series' è pazzesco-utile, può anche funzionare con timestamp quindi addio tabelle di calendario. –