Фон
У меня есть база данных Postgres 11, работающая на RDS. Мне нужно создать отчет, который показывает количество событий за определенный период, группировку, переименование и подсчет их на основе строк описания в категории в соответствии с бизнес-требованиями.
Проблема Для такого рода вещей я обычно go для искомого выражения case, который работает хорошо , за исключением : для части spe c требуется некоторые события должны быть отнесены к более чем одной категории. Но когда вычисляется выражение case, оно подсчитывает [или, кажется, подсчитывает] каждую строку только в одной категории [первой соответствующей в выражении].
Пример:
SELECT
CASE
WHEN (some_table.description ILIKE '%foo%' OR some_table.description ILIKE ‘%foobar%') THEN 'foo'
WHEN (some_table.description ILIKE '%bar%' OR some_table.description ILIKE ‘%foobar%) THEN 'bar'
END AS ‘category’,
count(*)
FROM some_table
GROUP BY category
ORDER BY category DESC
;
Итак, данные, подобные
event_id | description
---------------------------------
1 | ‘string including foo’
2 | ‘foo also included in this string’
3 | ‘ this string includes bar’
4 | ‘this one says foobar’
, ожидаемые выходные данные выглядят так:
some_table
category | count
---------------------------------
foo | 3
bar | 2
Однако фактическое выходные данные возвращаются как
some_table
category | count
---------------------------------
foo | 3
bar | 1
Как получить записи с описанием, содержащими 'foobar', для подсчета в категории 'foo' и 'bar'? И если выражение для случая является неправильным методом для этой цели отчетности, что следует использовать? Все указания приветствуются!