[英]How do I substract values from an UNION query in 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 ()
告訴我我是否正確解釋了自己。
**編輯
根據要求,我添加更多詳細信息:
來自3個表的UNION行是:
type | hs
___________
'BLUE' | 8
'RED' | 2
'ALL' | 15
我需要的是:
type | hs
___________
'BLUE' | 8
'RED' | 2
'REST' | 5
通過從ALL(15)中減去'RED'(2)+'BLUE'(8)來獲得'REST'值
在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 WHEN
和子查詢構成您的邏輯。
模式(PostgreSQL v9.6)
CREATE TABLE T1(
type varchar(50),
hs int
);
CREATE TABLE T2(
type varchar(50),
hs int
);
CREATE TABLE T3(
type varchar(50),
hs int
);
INSERT INTO T1 VALUES ('BLUE',8);
INSERT INTO T2 VALUES ('RED' , 2);
INSERT INTO T3 VALUES ('ALL' , 15);
查詢#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 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.