查找MySQL中每个人发送的消息数

问题描述 投票:1回答:4

这是我到目前为止所做的:

SELECT
    COUNT (message) AS 'Number Of Messages',
    person.id,
    first_name AS 'Sender\'s first name',
    last_name AS 'Sender\'s last name'
FROM person
JOIN message
    ON person.id = message.person_id;

这是问题:

任务14:查找每个人发送的邮件数

构造SQL语句以查找每个人发送的消息数。注意:必须使用WHERE子句设置此查询的条件。显示以下列:

-Count of messages
-Person ID
-First Name
-Last Name

这是我们正在使用的表

表名:消息

+------------+-----------+-------------+--------------------------------------------+---------------------+
| message_id | sender_id | receiver_id | message                                   | send_datetime      |
+------------+-----------+-------------+--------------------------------------------+---------------------+
|         1 |        1 |          2 | Congrats on winning the 800m Freestyle!   | 2016-12-25 09:00:00 |
|         2 |        2 |          1 | Congrats on winning 23 gold medals!       | 2016-12-25 09:01:00 |
|         3 |        3 |          1 | You're the greatest swimmer ever          | 2016-12-25 09:02:00 |
|         4 |        1 |          3 | Thanks! You're the greatest sprinter ever | 2016-12-25 09:04:00 |
|         5 |        1 |          4 | Good luck on your race                    | 2016-12-25 09:05:00 |
+------------+-----------+-------------+--------------------------------------------+---------------------+

表格名称:人

+-----------+------------+-----------+
| person_id | first_name | last_name |
+-----------+------------+-----------+
|        1 | Michael   | Phelps   |
|        2 | Katie     | Ledecky  |
|        3 | Usain     | Bolt     |
|        4 | Allyson   | Felix    |
|        5 | Kevin     | Durant   |
|        6 | Diana     | Taurasi  |
+-----------+------------+-----------+

有人可以告诉我我哪里出问题了吗?

谢谢!

mysql
4个回答
0
投票

一种方法使用从person表到message表的左联接,以查找每个人的计数:

SELECT
    p.person_id,
    p.first_name,
    p.last_name,
    COUNT(m.person_id) AS num_messages
FROM person p
LEFT JOIN message
    ON p.person_id = m.person_id
GROUP BY
    p.person_id,
    p.first_name,
    p.last_name;

注意:我们这里需要左联接,以覆盖未发送消息的人的极端情况。在这种情况下,我们要报告其计数为零。


0
投票
SELECT
    COUNT(*) AS `Number Of Messages`,
    p.id,
    p.first_name AS `Sender's first name`,
    p.last_name AS `Sender's last name`
FROM 
    person p inner JOIN 
    message m ON p.person_id = m.person_id
group by
    p.person_id,
    p.first_name,
    p.last_name;

结果应该看起来像

邮件数id发件人的姓氏3月1日伊万


0
投票
SELECT
    COUNT(*) AS `Number Of Messages`,
    p.id,
    p.first_name AS `Sender's first name`,
    p.last_name AS `Sender's last name`
FROM 
    person p LEFT JOIN 
    message m ON p.person_id = m.person_id
group by
    p.person_id,
    p.first_name,
    p.last_name;

0
投票

我可能会很累,以至于盯着给出答案的人,帮助我找到正确的答案。抱歉,我不记得了,谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.