如何在POSTGRESQL中从联合查询中减去值?
我的工会查询是:如何在POSTGRESQL中从联合查询中减去值?,sql,postgresql,union,Sql,Postgresql,Union,我的工会查询是: SELECT type, hs FROM (...) as table_1 UNION SELECT type, hs FROM (...) as table_2 UNION SELECT type, hs FROM (...) as table_3 我想做的是: SELECT table_1.hs hs_1, table_2.hs hs_2, table_3.hs - (table_1.hs + table_2.hs) hs_3 FROM () 请告诉我,我
SELECT type, hs
FROM (...) as table_1
UNION
SELECT type, hs
FROM (...) as table_2
UNION
SELECT type, hs
FROM (...) as table_3
我想做的是:
SELECT
table_1.hs hs_1,
table_2.hs hs_2,
table_3.hs - (table_1.hs + table_2.hs) hs_3
FROM ()
请告诉我,我的解释是否正确
**编辑
如有人问,我补充了更多细节:
所有3个表的UNION中的行为:
type | hs
___________
'BLUE' | 8
'RED' | 2
'ALL' | 15
我需要的是:
type | hs
___________
'BLUE' | 8
'RED' | 2
'REST' | 5
“剩余”值是通过从所有(15)中减去“红色”(2)+“蓝色”(8)的加法得到的
在Postgresql中,类似于:
SELECT
table_1.hs hs_1,
table_2.hs hs_2,
table_3.hs - (table_1.hs + table_2.hs) hs_3
FROM ()
您可以尝试使用
CTE
获取UNION
结果集。然后在和子查询生成逻辑时使用CASE
模式(PostgreSQL v9.6)
查询#1
WITH CTE AS (
SELECT type, hs
FROM T1
UNION
SELECT type, hs
FROM T2
UNION
SELECT type, hs
FROM T3
)
SELECT CASE WHEN type = 'ALL'
THEN 'REST'
ELSE type END,
CASE WHEN type = 'ALL'
THEN hs - (SELECT SUM(hs) FROM CTE WHERE type in ('RED','BLUE'))
ELSE hs END
FROM CTE;
| type | hs |
| ---- | --- |
| RED | 2 |
| REST | 5 |
| BLUE | 8 |
您能否为每个表提供几行示例数据,并说明预期输出应该是什么。另外,请查看除
之外的。那个关键字在sql中实现了集差。非常感谢!真的提前回答!!谢谢你们,还有来自阿根廷的热烈拥抱!没问题,很乐意帮忙:)
WITH CTE AS (
SELECT type, hs
FROM T1
UNION
SELECT type, hs
FROM T2
UNION
SELECT type, hs
FROM T3
)
SELECT CASE WHEN type = 'ALL'
THEN 'REST'
ELSE type END,
CASE WHEN type = 'ALL'
THEN hs - (SELECT SUM(hs) FROM CTE WHERE type in ('RED','BLUE'))
ELSE hs END
FROM CTE;
| type | hs |
| ---- | --- |
| RED | 2 |
| REST | 5 |
| BLUE | 8 |