Использование группировки по функциям в улье для получения агрегированных значений и получения нуля в качестве результата подсчета, когда данные недоступны для категории во входной таблице - PullRequest
0 голосов
/ 04 октября 2019

У меня есть входная таблица, как показано ниже, и я пытаюсь получить агрегированные значения:

Бины / корзины исправлены. В этом примере есть корзины / корзины - от 1 до 90, 97,98. Нужно рассчитывать на эти ведра / урны.

enter image description here

Мне удалось получить счетчик для всех бинов, когда данные доступны во входной таблице. Но когда данные недоступны, они не отображаются как ноль.

Любая помощь здесь высоко ценится. Заранее спасибо.

Пример : значение "97" не появляется в году = 2015. Следовательно, он должен иметь нулевое число в выходной таблице.

Код, который я пробовал:

выбрать 'ada' в качестве атрибута, year, '98 'в качестве bin, count (year) в качестве bin_count из mrmg_atrib_monit_psi_db. ada_data_types_negative, где ada = 98
объединение по годам, все выбирают 'ada' в качестве атрибута, год, '97 'в качестве bin, count (год) в качестве bin_count из mrmg_atrib_monit_psi_db.ada_data_types_negative, где ada = 97
объединение по годам allвыберите «ada» в качестве атрибута, год, «от 1 до 90» в качестве bin, count (год) в качестве bin_count из mrmg_atrib_monit_psi_db.ada_data_types_negative, где ada между 1 и 90 группируются по годам

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

выберите 'ada' в качестве атрибута, год, '98 'в качестве bin, count (year) в качестве bin_count из mrmg_atrib_monit_psi_db.ada_data_types_negative, где ada = 98
объединение по годам, все выбирают' ada 'в качестве атрибута, year,'97 'как bin, SUM (СЛУЧАЙ, КОГДА ada = 97, ТО 1, ЛИБО 0 КОНЕЦ) как bin_count из mrmg_atrib_monit_psi_db.ada_data_types_negative, где ada = 97
объединение по годам, все выбирают «ada» в качестве атрибута, год, «от 1 до 90»как bin, считать (год) как bin_count из mrmg_atrib_monit_psi_db.ada_data_types_negative, где группы ada BETWEEN 1 и 90 по годам

Решение: замена функции where в конце на Sum (case) в операторе select помогла получить нулевое числотоже

0 голосов
/ 04 октября 2019

Под «предопределенным» я предполагаю, что вы имеете в виду таблицу определений бинов. Затем вы можете использовать cross join для генерации строк и left join для генерации данных:

select y.year, b.bin, count(i.year) as cnt
from (select distinct year from input) y cross join
     bins b left join
     input i
     on i.year = y.year and i.ada between b.lo and b.hi
group by y.year, b.bin;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...