我的数据如下:
winning_pid losing_pid pair wins
1 2 1,2 7
2 1 1,2 3
3 4 3,4 2
我想要一个看起来像这样的结果:
pid opp_pid total wins losses
1 2 10 7 3
2 1 10 3 7
3 4 2 2 0
4 3 2 0 2
它基本上是:每个pid
值的对位总数和对手pid
值,它们之间的总和以及一对胜负。正如您所看到的那样,losing_pid
列中的winning_pid
值从未显示pid
值,因为UNNEST()
值没有获胜,但这些值必须位于总计表中。
是否有使用SELECT DISTINCT ON (pair) UNNEST(pair) as pid, COUNT(*) FILTER ( WHERE pid = winning_pid ) AS wins
对的快速解决方案?我做不到这样的事情:
pid
因为它无法识别FILTER
子句中的UNNEST()
。
我也在想pid
不是我想要的,因为我想要一个同时具有class="muted
值的结果表,而不是那个。
谢谢!
答案 0 :(得分:1)
使用union来切换结果:
select
pid,
opp_pid,
sum(wins + loses) total,
sum(wins) wins,
sum(loses) loses
from (
select winning_pid pid, losing_pid opp_pid, wins, 0 loses
from example
union
select losing_pid, winning_pid, 0, wins
from example
) s
group by 1, 2
order by 1, 2;
在rextester中测试。