mysql - Mysql 中使用 count、group by、order by 和 union 进行选择失败

标签 mysql select group-by sql-order-by union

我有以下三个表:

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(*)
  1. GROUP BY 应匹配非聚合选择列
  2. 我相信引擎无法计算表连接的一侧。在开始计数之前,它不知道关系是 1-1 还是 1-M,因此必须对两边进行计数,从而计数(*)。

或者你可以将两个 count(*) 切换为 count(1) 以获得我相信的相同效果。

关于mysql - Mysql 中使用 count、group by、order by 和 union 进行选择失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37397696/

相关文章:

MYSQL 选择少一行

mysql - 如何组合两个查询并将数据放入一行?

mysql - 与 GROUP BY 一起使用时 COUNT(DISTINCT ..) 的范围

mysql - 有没有办法判断 MySQL 联合查询中的结果集何时发生变化?

带 MIN 的 MySQL select 语句

mysql - AES_DECRYPT 你如何检查值是否已经在 mysql 中解密

mysql - 获取MYSQL单表中每个组的最后一条记录,条件是忽略某些组

python - Groupby 并将不同的值聚合为字符串

Mysql - 如何最大程度地计算表中每天的 Id?

mysql - 使用 ruby​​ 和 MAMP 作为本地服务器访问 SQL