我有以下三个表:
theUser(*user_id*, user_name)
ichat(*message_id*, sender, receiver, send_time)
gchat(*message_id*, sender, receiver, send_time)
ichat 和 gchat 之间的唯一区别是 ichat 中的接收者
是用户,而 gchat
中的接收者是组。但这对这个问题没有影响。
现在我想找出最活跃的n
个用户(用户名和相应的发送消息数),这意味着谁最常出现在sender
中。以下是我尝试过的代码:
SELECT COUNT(totalM.*) AS msge, u.name
FROM (
SELECT * FROM gchat
UNION ALL
SELECT * FROM ichat) AS totalM
JOIN theUser u ON totalM.sender=u.user_id
GROUP BY totalM.sender
ORDER BY COUNT(*)
但出现这样的错误:
You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '*) AS msge, u.name.
你对此有什么想法吗?预先感谢您!
最佳答案
SELECT COUNT(*) AS msge, u.name
FROM (
SELECT * FROM gchat
UNION ALL
SELECT * FROM ichat) AS totalM
JOIN theUser u ON totalM.sender=u.user_id
GROUP BY u.Name
ORDER BY COUNT(*)
- GROUP BY 应匹配非聚合选择列
- 我相信引擎无法计算表连接的一侧。在开始计数之前,它不知道关系是 1-1 还是 1-M,因此必须对两边进行计数,从而计数(*)。
或者你可以将两个 count(*) 切换为 count(1) 以获得我相信的相同效果。
关于mysql - Mysql 中使用 count、group by、order by 和 union 进行选择失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37397696/