У меня есть запрос PostgreSQL, у которого есть подзапрос. Подзапрос и возвращенные данные выглядят так:
SELECT i.item_id,
i.updated_date,
i.quantity
FROM items i
WHERE item IN (1675, 1676);
item | updated_date | quantity
===========================================
1675 | 2018-05-01 | 100
1676 | 2018-05-01 | 0
Мне нужно, чтобы основной запрос возвратил 1
, если COUNT
столбца updated_date
не равен 0, а любое из значений quantity
равно 0. У меня проблемы с продумыванием этого:
SELECT CASE WHEN COUNT(item_subquery.update_date) !=0
AND /* Can't figure out what to put here*/
THEN 1
ELSE 0
END as check_data
FROM (SELECT i.item_id,
i.updated_date,
i.quantity
FROM items i
WHERE item IN (1675, 1676)) item_subquery
Я пытался заменить мой комментарий в выражении CASE
на item_subquery.quantity = 0
, но это не работает, и я частично понимаю, почему. Мне трудно понять, как это сделать.
Как мне проверить, есть ли какое-либо значение в столбце quantity
моего подзапроса и включить его в мое утверждение case?
ОТВЕТ
Мне удалось выяснить это, на всякий случай, если кто-то ищет ответ. Вы можете добавить функцию FILTER
к вашей функции подсчета, чтобы сузить то, что именно подсчитывается. Вот как будет выглядеть запрос с тем, что я искал изначально:
SELECT CASE WHEN COUNT(item_subquery.update_date) !=0
AND COUNT(item_subquery.quantity) FILTER(item_subquery.quantity = 0) > 0
THEN 1
ELSE 0
END as check_data
FROM (SELECT i.item_id,
i.updated_date,
i.quantity
FROM items i
WHERE item IN (1675, 1676)) item_subquery