【发布时间】:2016-05-23 18:07:52
【问题描述】:
我有以下三个表:
theUser(*user_id*, user_name)
ichat(*message_id*, sender, receiver, send_time)
gchat(*message_id*, sender, receiver, send_time)
ichat 和 gchat 的唯一区别是,ichat 中的receiver 是用户,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.
你有什么想法吗?提前谢谢!
【问题讨论】:
-
尝试
count(*)而不是count (totalM.*)计数应该是一样的吧?因为它是 1-1 关系,所以我认为引擎不喜欢尝试计算连接一侧的记录。并且您的分组依据应与选择的非聚合列匹配。
标签: mysql select group-by sql-order-by union