微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如果两个 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。