我在用户活动的mysql表上编写查询时遇到问题,这会让我了解用户的活跃程度。表结构如下:
CREATE TABLE IF NOT EXISTS `ca_activity` (
`id` bigint(20) NOT NULL auto_increment,
`user_id` bigint(20) default NULL,
`activity_type` varchar(50) collate utf8_unicode_ci default NULL,
`activity_source` varchar(255) collate utf8_unicode_ci default NULL,
`created` timestamp NULL default NULL,
`updated` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2037 ;
我正在寻找的结果是执行每项活动的用户数量,按活动数量分组。例如,12330个用户执行了1个活动,9032个用户执行了2个活动,依此类推。我完全坚持这一点,所以任何提示都会受到赞赏。
答案 0 :(得分:2)
您可以使用嵌套的GROUP BY:
SELECT number_of_activities, COUNT(*) AS cnt
FROM
(
SELECT COUNT(*) AS number_of_activities
FROM ca_activity
GROUP BY user_id
) T1
GROUP BY number_of_activities
ORDER BY number_of_activities