在mysql中的Group by中的混乱

13 浏览
0 Comments

在mysql中的Group by中的混乱

我有一个类似于下面的表格:

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 (用户:3)             1
2  (用户:1,2)          2

我尝试了以下查询:

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

我需要使用嵌套分组吗?

0
0 Comments

在MySQL中使用GROUP BY进行分组时出现混淆的原因是因为子查询没有指定别名。解决方法是为子查询指定一个别名(例如sub0)。

以下是解决方法的代码示例:

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

当没有为子查询指定别名时,会出现错误消息:ERROR 1248 (42000): Every derived table must have its own alias。

通过为子查询指定一个别名,可以解决这个问题。

0