我有两个表:topic
和message
。
表topic
:
topic_id
// some other not important columns here
表message
:
message_id
topic_id
creation_date
// some other not important columns here
如您所见,每个主题都可以包含许多消息。
我想要获取的是:所有主题的列表(包含所有主题列)以及每个主题的消息计数按照属于主题的最新消息排序(最新消息的主题位于顶部)。
这是我的尝试:
SELECT topic.*, COUNT(message.message_id)
FROM topic LEFT OUTER JOIN message ON topic.topic_id = message.topic_id
GROUP BY topic.topic_id
ORDER BY message.creation_date DESC
这显然不起作用。我将不胜感激任何帮助。
答案 0 :(得分:3)
您的尝试不起作用的原因是message.creation_date
查询生成的列中没有GROUP BY
。
您可以将其添加到输出中,并在排序中使用它,如下所示:
SELECT
topic.*
, COUNT(message.message_id) cnt
, MAX(message.creation_date) last_msg
FROM topic LEFT OUTER JOIN message ON topic.topic_id = message.topic_id
GROUP BY topic.topic_id
ORDER BY last_msg DESC
您应该能够在不为其定义列的情况下进行排序,如下所示:
SELECT topic.*, COUNT(message.message_id)
FROM topic LEFT OUTER JOIN message ON topic.topic_id = message.topic_id
GROUP BY topic.topic_id
ORDER BY MAX(message.creation_date) DESC