Если вам нужны десятилетия, когда у вас нет ни фильмов, ни фильмов с фильмами, тогда вы можете использовать generate_series
, чтобы составить список десятилетий и выполнить левое внешнее объединение для ваш стол; generate_series
- это стандартный способ создания числовых и временных списков на лету в PostgreSQL. Как-то так должно начаться:
select decade.d, count(t.year)
from generate_series(1900, 2100, 10) as decade(d)
left outer join your_table t on decade.d = floor(t.year / 10) * 10
group by decade.d
order by decade.d
Это даст такой результат:
d | count
------+-------
1900 | 1
1910 | 0
1920 | 1
1930 | 3
1940 | 0
1950 | 0
1960 | 1
1970 | 0
1980 | 3
-- ...
2100 | 0
Вы можете настроить первое и последнее значения для вызова generate_series
, чтобы соответствовать вашим данным, если это необходимо.
Бит floor(t.year / 10) * 10
дает вам десятилетие для данного года; он преобразует 1942 в 1940, 2000 в 2000 и т. д.
Вы можете настроить таблицу десятилетий (таблицу из одного столбца с одной записью для каждого десятилетия), если вы переходите в базу данных, в которой нет ничего похожего на generate_series
. SQL будет почти таким же, просто замените вызов generate_series
на таблицу декад.