我有以下架构:
CREATE TABLE aTable
("id" int, "idOfOperation" varchar(10), "uniqueName" varchar(6), "randomNumber" int)
;
INSERT INTO aTable
("id", "idOfOperation", "uniqueName", "randomNumber")
VALUES
(1, 'operation1', 'model1', 3),
(2, 'operation1', 'model2', 5),
(3, 'operation2', 'model2', 43),
(4, 'operation2', 'model3', 57),
(5, 'operation2', 'model4', 65)
;
约束:
- (idOfOperation, uniqueName) 是唯一的。
表包含不同操作(operation1、operation2)的结果,并且该操作有多个子模型(model1、model2、model3、model4)和一些唯一值(randomNumber)。
我需要达到的目标:
- 创建一个查询,该查询将查找具有以下输出的两个操作集(操作 1、操作 2)的总和:
'model2', 5.18, 'model2', 43.2
我已经尝试过以下内部连接:
select r1.*, r2.*
from aTable r1
inner join aTable r2
on (r1."uniqueName" = r2."uniqueName" and r1."idOfOperation" != r2."idOfOperation")
where (r1."idOfOperation" = 'operation1' or r1."idOfOperation" = 'operation2')
但结果包含两行而不是一行(交换值):
id idOfOperation uniqueName randomNumber id idOfOperation uniqueName randomNumber
3 operation2 model2 43 2 operation1 model2 5
2 operation1 model2 5 3 operation2 model2 43
预期结果是:
operation2, operation1, model2, 43, 5
如果有任何帮助,我将不胜感激。
最佳答案
请使用下面的查询,
select split_part(idOfOperation, ',', 2) as col1, split_part(idOfOperation, ',', 1) as
col2, uniqueName as col3, split_part(randomNumber, ',', 2) as col4,
split_part(randomNumber, ',', 1) as col5 from
(select STRING_AGG ("idOfOperation", ',') as idOfOperation , "uniqueName" as
uniqueName, STRING_AGG ("randomNumber"::text, ',') as randomNumber
from aTable group by "uniqueName") qry where split_part(idOfOperation, ',', 2) != '';
截取您的预期结果,
关于sql - 集合的自内连接、聚合和求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62066286/