2

我有一张这样的桌子:

_id sender_id receiver_id text
1   1         2           xxx
2   2         1           yyy
3   1         2           xyz
4   3         1           abc

我需要在sender_idreceiver_id列上进行 GROUP BY,但它应该是对称的,所以 {1,2} 和 {2,1} 应该被视为同一个组。

这个查询可以在一个随机的 DBMS 上执行,所以它应该尽可能地标准。

4

1 回答 1

6

我认为您在这里需要两个 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,

如果您使用的是 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)

在 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)
于 2016-06-07T08:38:42.870 回答