我有一个SQL表,它有250000+行和3列。我的桌子看起来像这样;
HashSet
我想这样做,当我用SQL编译代码时,我的表应该看起来像这样;
contains()
注意:我不是SQL专家,抱歉,我对此无能为力。
答案 0 :(得分:0)
这是一个棘手的问题。我假设当有一对时,您希望对和的顺序保持较高:
with cc as (
select column1, column2, sum(column3) as sum_column3
from t
group by column1, column2
)
select (case when cc2.sum_column3 > cc.sum_column3 then cc2.column1 else cc.column1 end) as column1,
(case when cc2.sum_column3 > cc.sum_column3 then cc2.column2 else cc.column2 end) as column2,
(cc.sum_column3 + coalesce(cc2.sum_column3, 0)) as sum_column3
from cc left join
cc cc2
on cc.column1 = cc2.column2 and cc.column2 = cc2.column
where cc2.column1 is null or (cc.column1 < cc.column2); -- keep only one row of pairs
因此,此查询从汇总数据开始。然后,它会查看数据中是否有“反向”行。如果是这样,它将根据更普遍的顺序选择列。