• 数据库:Postgres
  • 表名:records
  • 有 4 列 Year | Dept | Expense | Month

  • 因此,每年每个月/每个部门最多可以有一个记录。

    我有一个子查询,它根据约束返回以下数据。
    Year | Dept
    2001 | HR
    2001 | ACC
    2001 | TECH
    2002 | TECH
    2003 | HOUSE-KEEPING
    2003 | TECH
    

    现在我需要在同一个表上运行另一个查询来获得每个值对的总费用。

    使用子查询的输出,我的主查询将类似于
    select Dept, sum(Expense)
    from records
    where (Year, Dept) in (...)
    ... I want to iterate over value pairs from the subquery
    
    (SUBQUERY which returns
    Year | Dept
    2001 | HR
    2001 | ACC
    2002 | TECH
    2003 | HOUSE-KEEPING
    )
    

    当我运行这个 select 语句时,返回的输出只包含所有三年的 TECH 数据。

    请帮助理解我如何在子查询的所有行上运行主选择

    最佳答案

    将子查询重构为连接。

    说你有

    SELECT a, b FROM t1 WHERE (x,y) IN (SELECT x1, y1 FROM t2 WHERE ...)
    

    这是行不通的。你改写为
    SELECT a, b
    FROM t1
    INNER JOIN (
       -- subquery here:
       SELECT x1, y1
       FROM t2
       WHERE ...
    ) AS some_alias
    WHERE t1.x = some_alias.x1
      AND t1.y = some_alias.y1;
    

    请注意, in PostgreSQL you shouldn't use a CTE (WITH query) for this

    你可以缩写
    WHERE t1.x = some_alias.x1
      AND t1.y = some_alias.y1;
    


    WHERE (x, y) = (x1, y1)
    

    尽管。

    关于sql - 来自子查询的两列上的 Postgres where 子句,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46407030/

    10-11 03:31
    查看更多