问题描述
我有两个用户 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
结果