这是我到目前为止所做的:
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 |
+-----------+------------+-----------+
有人可以告诉我我哪里出问题了吗?
谢谢!
一种方法使用从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;
注意:我们这里需要左联接,以覆盖未发送消息的人的极端情况。在这种情况下,我们要报告其计数为零。
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日伊万
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;
我可能会很累,以至于盯着给出答案的人,帮助我找到正确的答案。抱歉,我不记得了,谢谢!