我需要一个根据条件将用户配对的查询。查询将返回动态的行数,等于符合条件的对的数量。该查询返回两个字段id1
和id2
,每个字段都是用户的ID。如何创建查询以便id不会再显示在另一行?
我要返回的示例:
id1 id2
001 003
004 006
009 011
023 042
我不想要返回的示例:
id1 id2
001 003
003 004
012 002
023 012
答案 0 :(得分:1)
如果我理解正确,你有一些表,比如Users
,你想要配对用户。您可能还有where
条款或其他条件。
你实际上可以做到这一点。枚举行,然后基于组合相邻的偶数和奇数值进行条件聚合:
select min(u.userid) as userid1, max(u.userid) as userid2
from (select u.*, (@rn := @rn + 1) as seqnum
from users u cross join
(select @rn := 0) vars
) u
group by floor((seqnum - 1) / 2)
having userid1 <> userid2;
您可以在子查询中轻松添加where
子句。