假设没有语法错误,列名和表名都正确,下面的MySQL查询有什么问题?
(对于我们每个用户,这应该返回他们发送的消息数量)
select
u.user_id
, sum(case when um.message_id is not null then 1 else 0 end) as number_of_messages_sent
from users u
left join users_messages um
on um.user_id = u.user_id
where um.status = 'sent'
group by
u.user_id
;
答案 0 :(得分:0)
据推测,您希望看到没有发送消息且消息计数为0的用户,但您没有看到它们?这是因为您包含WHERE um.status = 'sent'
,这将在执行聚合之前从结果集中删除这些记录。
这个问题有很多解决方案。假设Klaus在下面的评论中指出,通过将条件移动到JOIN子句中,您将获得所需的效果。您也可以在FROM子句中执行WHERE um.status = 'sent' or um.message_id IS NULL
(假设message_id
被声明为NOT NULL)或LEFT JOIN (SELECT * FROM user_messages WHERE status = 'sent') AS um
。