简体   繁体   English

如何计算每天发给不同人的邮件数量?

[英]How can I count the number of messages to different people per day?

I have a table like this: 我有一张这样的桌子:

// messages
+----+----------------+-----------+-------------+-------------+
| id |    content     | sender_id | receiver_id |  date_time  |
+----+----------------+-----------+-------------+-------------+
| 1  | whatever1      | 1         | 3           | 1521097240  |
| 2  | whatever2      | 3         | 1           | 1521097241  |
| 3  | whatever3      | 1         | 3           | 1521097242  |
| 4  | whatever4      | 1         | 4           | 1521097243  |
| 5  | whatever5      | 1         | 5           | 1521097244  |
| 6  | whatever6      | 5         | 1           | 1521097245  |
+----+----------------+-----------+-------------+-------------+

Now I need to count the number of messages that user sender_id = 1 to different people. 现在,我需要计算用户sender_id = 1发送给其他人的消息数。 So assuming all those row are in the past day, then the result should be 3 . 因此,假设所有这些行都在前一天,则结果应为3 Because sender_id = 1 have sent messages to receiver_ids = 3,4,5 . 因为sender_id = 1已将消息发送到sender_id = 1 receiver_ids = 3,4,5 How can I do that count in Mysql? 如何在Mysql中进行计数?


Here is what I've tried: 这是我尝试过的:

SELECT count(1) as sent_messages_num
FROM messages
WHERE sender_id = 1  
AND date_time > UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 1 DAY))

So all I need it adding a grouping. 因此,我只需要添加分组即可。 But not sure how should I do that? 但是不确定我该怎么做?

Try using the following query: 尝试使用以下查询:

SELECT count(*) as sent_messages_num, receiver_id
FROM users
WHERE sender_id = 1  
AND date_time > UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 1 DAY))
GROUP BY receiver_id

This will give you the number of messages per receiver. 这将为您提供每个接收者的消息数量。 After I read the answer again, I think the following might suit better: 再次阅读答案后,我认为以下内容可能更合适:

SELECT count(DISTINCT receiver_id) as sent_messages_num
FROM users
WHERE sender_id = 1  
AND date_time > UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 1 DAY))

You need to use distinct in COUNT 您需要使用distinctCOUNT

SELECT count(distinct receiver_id) as sent_messages_num
FROM users
WHERE sender_id = 1  
AND date_time > UNIX_TIMESTAMP(DATE_SUB(now(), INTERVAL 1 DAY))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM