Dane:SQL liczyć zakresy z grupą-by i zawierają 0 liczy
table 'thing':
age
---
3.4
3.4
10.1
40
45
49
Chcę policzyć rzeczy dla każdego zakresu 10-letniej, np
age_range | count
----------+-------
0 | 2
10| 1
20| 0
30| 0
40| 3
To zapytanie zbliża:
SELECT FLOOR(age/10) as age_range, COUNT(*)
FROM thing
GROUP BY FLOOR(age/10) ORDER BY FLOOR(age/10);
wyjściowa:
age_range | count
-----------+-------
0 | 1
1 | 2
4 | 3
Jednak nie pokazuje mi zakresów, które mają 0 zliczeń. W jaki sposób mogę zmodyfikować zapytanie tak, aby pokazywało także zakresy między 0 a liczbą?
Znalazłem podobne pytania stackoverflow dla zliczania zakresów, niektóre dla 0 zliczeń, ale wiążą się z koniecznością określenia każdego zakresu (albo zakodowanie sztywne zakresów w zapytaniu, albo wprowadzenie zakresów w tabeli). Wolałbym używać ogólnego zapytania, takiego jak powyżej, w którym nie muszę wyraźnie określać każdego zakresu (np. 0-10, 10-20, 20-30, ...). Używam PostgreSQL 9.1.3.
Czy istnieje sposób modyfikacji powyższego prostego zapytania w celu uwzględnienia liczby 0?
podobne:
Oracle: how to "group by" over a range?
Get frequency distribution of a decimal range in MySQL
To miłe. Dobra funkcja do poznania. – Glenn
Elegancka odpowiedź, @mu_is_too_short! Wypróbowałem to i zadziałało. Właśnie tego szukałem. Dzięki! –
@Glenn: Tak, 'generate_series' jest szalenie użyteczna, może również pracować z sygnaturami czasowymi, więc do zobaczenia tabel kalendarza. –