[英]How do I substract values from an UNION query in POSTGRESQL?
My UNION query is: 我的UNION查询是:
SELECT type, hs
FROM (...) as table_1
UNION
SELECT type, hs
FROM (...) as table_2
UNION
SELECT type, hs
FROM (...) as table_3
What i want to do is: 我想做的是:
SELECT
table_1.hs hs_1,
table_2.hs hs_2,
table_3.hs - (table_1.hs + table_2.hs) hs_3
FROM ()
Just tell me if I have explained myself correctly. 告诉我我是否正确解释了自己。
** Edited **编辑
As asked, I add more details: 根据要求,我添加更多详细信息:
Rows from UNION of all 3 tables are: 来自3个表的UNION行是:
type | hs
___________
'BLUE' | 8
'RED' | 2
'ALL' | 15
What i need is: 我需要的是:
type | hs
___________
'BLUE' | 8
'RED' | 2
'REST' | 5
'REST' value is obtained from substracting the addition of 'RED' (2) + 'BLUE' (8) from ALL (15) 通过从ALL(15)中减去'RED'(2)+'BLUE'(8)来获得'REST'值
In Postgresql, something like: 在Postgresql中,类似:
SELECT
table_1.hs hs_1,
table_2.hs hs_2,
table_3.hs - (table_1.hs + table_2.hs) hs_3
FROM ()
You can try to use CTE
to get the UNION
result set. 您可以尝试使用
CTE
获取UNION
结果集。 then use CASE WHEN
and subquery make your logic. 然后使用
CASE WHEN
和子查询构成您的逻辑。
Schema (PostgreSQL v9.6) 模式(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);
Query #1 查询#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.