如果两个 id 以两种方式匹配,则检查 PGSQL

问题描述

我有两个用户 ID:ID_User1 和 ID_User2。如果 ID_User1 与 ID_User2 匹配且 ID_User2 与 ID_User 1 匹配有重复条目,我想检查我的表,如下所示:

1 对 2 1 对 2

还有

2 与 1 匹配

我实际上是这样做的:

SELECT * FROM (SELECT *,COUNT(*) OVER (PARTITION BY "IDWU_User1","IDWU_User2") AS COUNT FROM "WU_MatchingUsers") tableWithCount WHERE tableWithCount.count > 1;

这是结果:

id | IDWU_User1 | IDWU_User2 | Matchingscore | count 
----+------------+------------+---------------+-------
  1 |          1 |          2 |            39 |     2
 46 |          1 |          2 |            35 |     2
  2 |          1 |          3 |            41 |     2
 47 |          1 |          3 |            35 |     2

但我想要这样的结果:

id | IDWU_User1 | IDWU_User2 | Matchingscore | count 
----+------------+------------+---------------+-------
  1 |          1 |          2 |            39 |     3
 46 |          1 |          2 |            35 |     3

 48 |          2 |          1 |            35 |     3

  2 |          1 |          3 |            41 |     2
 47 |          1 |          3 |            35 |     2

我也想在中间有一排。所以还要检查是否有重复的行/匹配的方式 B > A 而不仅仅是 A > B。

亲切的问候!

解决方法

使它成为一个 case 表达式,id1 大于 id2。 我使用素数来唯一地组合 id,字符串连接和分隔符也可以:

SELECT * FROM (SELECT *,COUNT(*) OVER (PARTITION BY CASE WHEN IDWU_User1 > IDWU_User2 THEN IDWU_User1*2 + IDWU_User2*3 ELSE IDWU_User1*3 + IDWU_User2*2 END ) 
AS COUNT FROM WU_MatchingUsers) tableWithCount WHERE tableWithCount.count > 1

结果

enter image description here

db-fiddle