sql - 子查询中两列的 Postgres where 子句

标签 sql postgresql select subquery where-clause

  • 数据库:Postgres
  • 表名:记录
  • 有 4 列 年 |部门 |费用 |月份

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

我有一个子查询,它根据约束返回以下数据。

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/

相关文章:

python - 通过创建模块简化数据库(psycopg2)的使用

sockets - 解决套接字问题并选择

sql - 如何更新 SQL 中游标获取的列

mysql - COUNT with case 语句不能正常工作

sql - Mysql:如何选择具有特定值的组?

mysql - 如何知道mysql中下一个自增id是什么?

mysql - 这个自左连接返回的记录比我预期的要多

php - 了解参数化查询 php、sql、mysql

postgresql - Postgres : Concurrent queries in a connection

ruby-on-rails - heroku rails 上的 Postgres 连接超时错误