mysql - 计算发送/接收对的不同集合

标签 mysql sql

我们有一个表来跟踪我们应用程序的用户之间发送的消息。每行都有一个 fromidtoidmessageiddatetime

我想计算相互通信的不同用户对的数量。另一种表达方式是对用户之间不同的“对话”进行计数,其中对话简单地定义为两个用户之间发送的一条或多条消息。因此,举一个具体的例子,一次对话可能是 Fred 向 Bob 发送 2 条消息,Bob 向 Fred 发送 3 条消息。

fromid toid messageid datetime
Fred Bob 123 2013-04-22 00:00:01
Bob Fred 135 2013-04-22 00:01:02
Fred Bob 238 2013-04-22 00:05:00
Bob Fred 300 2013-04-22 00:09:13
Bob Fred 312 2013-04-22 00:10:48

所有这些都只是 1 次对话。对此进行查询的有效方法是什么(表非常大)?

最佳答案

SELECT COUNT(DISTINCT LEAST(fromID, toID), GREATEST(fromID, toID)) TotalConversation
FROM   messages

输出

╔═══════════════════╗
║ TOTALCONVERSATION ║
╠═══════════════════╣
║                 1 ║
╚═══════════════════╝

关于mysql - 计算发送/接收对的不同集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16181752/

相关文章:

mysql - 通过比较同一个表中的时间列来选择行

sql - 关系数据库中 "comment"表的最佳实践

mysql - 如果 new_value <= value_from_different_row 有条件更新

php - MySQL 数据库中的乱码文本

php - 如何检查 mysql 列是否不为 NULL?

mysql - 使用 DATE_FORMAT() 和 IN 获取总和

3表内连接的SQL计算

php - 有没有办法在 mysql 数据库中创建链接表?

PHP获取mysql行下的值

mysql - 从日期和今天不同的表中选择