Ale*_*dro 1 sql group-by symmetric
我有一张这样的桌子:
_id sender_id receiver_id text
1 1 2 xxx
2 2 1 yyy
3 1 2 xyz
4 3 1 abc
Run Code Online (Sandbox Code Playgroud)
我需要对sender_id和receiver_id列进行GROUP BY ,但它应该是对称的,因此{1,2}和{2,1}应该被视为同一个组.
此查询可以在随机DBMS上执行,因此它应尽可能最标准.
我认为你需要两个 CASE表达式,因为你在两列上分组:
GROUP BY CASE WHEN sender_id < receiver_id THEN sender_id
ELSE receiver_id
END,
CASE WHEN sender_id < receiver_id THEN receiver_id
ELSE sender_id
END,
Run Code Online (Sandbox Code Playgroud)
如果您使用的是MySQL,请考虑使用LEAST(),GREATEST()技巧:
SELECT LEAST(sender_id, receiver_id), GREATEST(sender_id, receiver_id)
FROM yourTable
GROUP BY LEAST(sender_id, receiver_id), GREATEST(sender_id, receiver_id)
Run Code Online (Sandbox Code Playgroud)
在SQLite中,您可以使用MAX()和MIN()作为标量函数:
SELECT MIN(sender_id, receiver_id), MAX(sender_id, receiver_id)
FROM yourTable
GROUP BY MIN(sender_id, receiver_id), MAX(sender_id, receiver_id)
Run Code Online (Sandbox Code Playgroud)