Запрос распределения частоты SQL для подсчета диапазонов с группировкой и включения 0 счетчиков

Дано:

table 'thing':

age
---
3.4
3.4
10.1
40
45
49

Я хочу подсчитать количество вещей для каждого 10-летнего диапазона, например,

age_range | count
----------+-------
        0 |     2
        10|     1
        20|     0
        30|     0
        40|     3

Этот запрос близок:

SELECT FLOOR(age / 10) as age_range, COUNT(*)
FROM thing
GROUP BY FLOOR(age / 10) ORDER BY FLOOR(age / 10);

Вывод:

 age_range | count 
-----------+-------
         0 |     1
         1 |     2
         4 |     3

Однако это не так. т показать мне диапазоны, которые имеют 0 счетов. Как я могу изменить запрос, чтобы он также отображал промежуточные диапазоны с 0 счетчиками?

Я нашел похожие вопросы stackoverflow для подсчета диапазонов, некоторые для 0 подсчетов, но они требуют указания каждого диапазона (либо жестко кодируя диапазоны в запросе, либо помещая диапазоны в таблицу). Я бы предпочел использовать общий запрос, подобный приведенному выше, где мне не нужно явно указывать каждый диапазон (например, 0-10, 10-20, 20-30,...). Я использую PostgreSQL 9.1.3.

Можно ли изменить приведенный выше простой запрос, включив в него 0 счетчиков?

Аналогично:
Oracle: как "группировать" по диапазону?
Получить частотное распределение десятичного диапазона в MySQL

9
задан Community 23 May 2017 в 00:31
поделиться