2010-08-12 4 views
1

J'ai des difficultés à écrire une requête sur une table mysql d'activité de l'utilisateur qui me donnera une ventilation de la façon dont nos utilisateurs sont actifs. La structure de la table est comme ceci:Requête MySQL regroupant des utilisateurs effectuant une activité

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 ; 

Le résultat que je cherche est le nombre d'utilisateurs qui ont effectué chaque nombre d'activités, regroupées par le nombre d'activités. Par exemple 12330 utilisateurs ont effectué 1 activité, 9032 effectué 2 activités et ainsi de suite. Je suis complètement coincé là-dessus donc tous les conseils seraient appréciés.

Répondre

2

Vous pouvez utiliser bys GROUP imbriqués:

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 
+1

qui a fait exactement ce que je cherchais. Savez-vous s'il y a une astuce pour démarrer le number_of_activities à 0? Autre que simplement soustraire du nombre total d'utilisateurs. Merci. –

+1

Oui, vous pouvez quitter la table des utilisateurs avec la table ca_activity et COUNT (ca_activity.id) 'dans la sous-requête. La requête externe peut rester inchangée. –

Questions connexes