postgresql - 使用两个不同键的条件 JOIN
问题描述
我有一个生成两个单独 ID 的查询:
SELECT
date,
user_id,
vendor_id,
SUM(purchase) user_purchase
SUM(spend) vendor_spend
GROUP BY 1,2,3
FROM tabla.abc
这会产生如下结果:
date user_id vendor_id user_purchase vendor_spend
1/1/18 123 NULL 5.00 0.00
1/1/18 NULL 456 0.00 10.00
我想把它加入一个看起来像这样的桌子上:
client_id user_id vendor_id
456789 123 NULL
101112 NULL 456
但问题是,我显然想在两个适当的 ID 上加入它,所以我的最终输出看起来像这样:
date client_id user_id vendor_id user_purchase vendor_spend
1/1/18 456790 123 NULL 5.00 0.00
1/1/18 101112 NULL 456 0.00 10.00
那么有没有一种我可以做的方法,一个有条件的加入?诸如此类的东西WHERE user_id IS NULL THEN...
...
解决方案
使用not distinct from
,因为其中一个参数可能为空:
select *
from (
select
date,
user_id,
vendor_id,
sum(purchase) user_purchase,
sum(spend) vendor_spend
from table1
group by 1,2,3
) t1
join table2 t2
on (t1.user_id, t1.vendor_id)
is not distinct from (t2.user_id, t2.vendor_id)
请注意,出于性能原因,您应该加入已经聚合的表(因此我将原始查询放在派生表中)。
推荐阅读
- sql - 如何列出SQL中多列中值出现的次数?
- javascript - 提交多个 html 表单
- c++ - C++ 构造函数和右值
- sql-server - 选择列表中只能指定单个表达式,MSSQL查询
- heroku - React-BoilerPlate 部署到 heroku 成功但应用程序错误
- visual-studio - Service Fabric 应用程序模板在 Visual Studio 中不可用
- javascript - php和javascript替换正则表达式
- json - 删除/替换 Azure 逻辑应用中解析的 JSON 输出中的字符
- typo3 - 部署脚本无法生成 PackageStates.php,而相同的 Shell-Command 可以工作。(TYPO3)
- python-3.x - 通过 Python 连接到 Sharepoint - UrlLib 错误