sql - 如何检查 SQL 查询中子查询中值的出现

标签 sql postgresql group-by count subquery

我有一个包含子查询的 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,并且 中的任何一个,我需要主查询返回 1 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

我尝试用 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

最佳答案

在 Postgres 中,很容易将 bool 值转换为数字。因此,您可以将逻辑编写为:

SELECT (SUM( (quantity = 0)::int) > 0 AND COUNT(updated_date) > 0)::int
FROM items i
WHERE item IN (1675, 1676);

反过来,这可以简化为:

SELECT ( SUM( (quantity = 0)::int ) > 0)::int
FROM items i
WHERE item IN (1675, 1676);

如果需要,您可以使用子查询,但这不是必需的。

关于sql - 如何检查 SQL 查询中子查询中值的出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53286199/

相关文章:

sql - H2 与 PostgreSQL 生成的带有函数的列

sql - 从表中的每一列中获取前三个最常见的值

PostgreSQL JSONB 数组 - 查找键是否存在

postgresql - 如何在 Google Cloud Platform 上将数据库(postgres)连接到 Airflow Composer?

python - 如何根据阈值对多列进行分组并在Python中创建新列

MySql Group by 和 Pivot

sql - 运行 SQL 查询时出现 "ORA-00913: too many values"错误

MySQL:左连接与左连接

PostgreSQL:外键列中的 NULL 值

php - Mysql group by 并计算单独列上的尝试