按照两列相反值进行分组

3

我尝试使用两列进行分组:

SELECT recipient_id, sender_id, count(*) FROM messengers WHERE recipient_id=41 OR sender_id=41 group by recipient_id, sender_id 

输出如下所示:

enter image description here

当收件人和发件人的ID相同时(均为40和41),我该如何将第1行和第2行合并为一行。
1个回答

4

在这里,您可以使用的一个技巧是将GROUP BY应用于两个ID列中较小的那个较大的那个

SELECT LEAST(recipient_id, sender_id), GREATEST(recipient_id, sender_id), COUNT(*)
FROM messengers
WHERE recipient_id = 41 OR sender_id = 41
GROUP BY LEAST(recipient_id, sender_id), GREATEST(recipient_id, sender_id)

目前看起来不错。我会尝试使用它,在其他人回答之前等待,然后再决定是否接受您的答案。谢谢! - user1294914
我修改了你对这个问题的答案: SELECT * FROM (SELECT * FROM messengers ORDER BY id desc) as A WHERE recipient_id = 41 OR sender_id = 41 GROUP BY LEAST(recipient_id, sender_id), GREATEST(recipient_id, sender_id)但我现在遇到了困难,无法将其转换为 Laravel 查询构建器。 - user1294914
@Mr.Byte 根据 ANSI 92 标准,出现在 SELECT 中的列要么也出现在 GROUP BY 中,要么是聚合函数。因此,在这里不应使用 SELECT *。您可以提出一个新问题来解决您的 Laravel 问题。 - Tim Biegeleisen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接