【发布时间】:2018-11-13 17:07:30
【问题描述】:
我有一个包含子查询的 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
如果updated_date 列的COUNT 不为0,并且quantity 中的任何一个值为0,我需要主查询返回1。我在考虑这个问题时遇到了麻烦:
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
我尝试用item_subquery.quantity = 0 替换我在CASE 语句中的评论,但这不起作用,我部分理解原因。我很难概念化如何做到这一点。
我将如何检查子查询的 quantity 列中的任何值是否为 0,并将其合并到我的 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
【问题讨论】:
-
什么
the COUNT of the updated_date column is not 0??你能举例说明什么时候要返回 0,什么时候要返回 1? -
@JuanCarlosOropeza 在上面的帖子中,查看子查询的结果。其中一行 (item = 1676) 在数量列中有一个 0。我希望我的主查询检查子查询的数量列中的任何值是否为 0。
-
是的,但不确定您为什么说日期计数?你有空日期?我也想要两者的例子,当你想要 0 和当你想要 1 使逻辑更清晰时
-
我只需要计算日期,但这不是问题所在。如果
COUNT(created_date)不等于0 并且子查询中quantity字段行的any 为0,我只需要我的主查询的CASE 语句返回1。 -
你很固执吧?我可以慢慢来,但根据我的经验,如此小的样本数据可以用不同的逻辑解释并带来期望的结果。所以我不想花时间试图解决一个问题,然后被告知那不是你想要的。所以请向我们展示当你得到 1 和当你得到 0 的两种情况。再一次为什么 count(created_date) ?该字段可以为空吗?
标签: sql postgresql group-by count subquery