【问题标题】:Confusion in Group by in mysqlmysql中Group by的混淆
【发布时间】:2014-07-08 05:55:12
【问题描述】:

我有一个类似的表:

user_id     |   action

 1                a1                  
 2                a1
 1                a1
 3                a1
 2                a1
 1                a2
 2                a2

我必须找出执行过操作 a1 的用户数,按操作数和 a1 的用户数分组。

例如在上表中,输出应该是:

num_users          num_action_a1
1 (user: 3)             1
2  (user: 1,2)          2

我尝试了以下查询

select user_id, count(user_id) from table where action = 'a1' group by user_id

我必须使用嵌套分组吗?

【问题讨论】:

  • 你尝试过什么查询?
  • select user_id, count(user_id) from table where action = 'a1' group by user_id - 我对使用 2 group by 感到困惑
  • 再次尝试:select user_id, count(user_id) from table where query_type = 'a1' group by user_id, count(user_id) - 没用 :(
  • 试试这个 SELECT count(user_id) num_users FROM table WHERE action=a1 GROUP BY (SELECT count(user_id) no_users FROM table ASC),(SELECT count(user_id) FROM table WHERE action=a1)

标签: mysql group-by


【解决方案1】:

使用子查询获取每个用户 ID 的计数,然后从中选择用户和计数:-

SELECT num_users, GROUP_CONCAT(user_id) AS actual_users , COUNT(*) AS num_action_a1
FROM
(
    SELECT user_id, COUNT(*) AS num_users
    FROM some_table
    WHERE action = 'a1'
    GROUP BY user_id
) sub0
GROUP BY num_users

【讨论】:

  • 收到此错误:错误 1248 (42000):每个派生表都必须有自己的别名
  • 只需要子查询的别名(我刚刚添加为sub0)
猜你喜欢
  • 1970-01-01
  • 2017-01-04
  • 2022-10-12
  • 2011-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-03
  • 2013-09-05
相关资源
最近更新 更多