6
votes

MySQL - Groupe par nombre d'utilisateurs dans les gammes de journaux de connexion uniques et par département

Je travaille sur une requête en ce moment qui comptera le nombre de journaux de connexion uniques par utilisateur, placez-les dans un godet (1-2, 3-4 journaux de journal, etc.) et renvoyez le nombre de chacun utilisateurs de chaque godet par département. Je m'excuse si ce n'est pas trop clair et j'espère que les exemples ci-dessous aideront à illustrer ma question.

J'ai une table comme celle-ci: p> xxx pré> je veux retourner une table comme celle-ci: p> xxx pré>

à partir de maintenant, ma requête ressemble à: p> xxx pré>

Cependant, cela retourne un Table comme ci-dessous, le plus proche que je puisse arriver à ce que je veux, mais je ne sais pas comment le faire rouler jusqu'à juste par les seaux et le département. p>

+---------+------------+-----------+
| buckets |    dept    | user_name |
+---------+------------+-----------+
| 1-2     | accounting | Mark      |
| 1-2     | accounting | Nate      |
| 3-4     | finance    | Bob       |
| 1-2     | finance    | Joe       |
| 3-4     | marketing  | Jeff      |
+---------+------------+-----------+


0 commentaires

3 Réponses :


-1
votes

Juste pour être sûr que je comprenne, vous essayez essentiellement de le faire:

    select 
    (case when count(distinct(`time`)) between 1 and 2 then '1-2' 
          when count(distinct(`time`)) between 3 and 4 then '3-4'
          else '5+'
     end) as buckets, dept, count(*) as `number of users`
from change_log where event in ('logged in')  
group by dept, buckets


0 commentaires

2
votes

quelque chose comme ça? XXX


2 commentaires

Cela semble fonctionner! J'ai eu une "chaque table dérivée doit avoir son propre alias". Message d'erreur mais après avoir donné un alias à la table dérivée de la deuxième instruction SELECT, elle fonctionnait. Merci beaucoup! J'essaie toujours de me mettre à l'aise avec des déclarations de sélection imbriquées.


Je les utilise si je suis vraiment vraiment. Dans la plupart des cas, j'ai plusieurs endossements sélectionnés et sont confus. Dans ces cas, j'essaie de créer des tables temporaires et d'utiliser celles-ci pour obtenir mon résultat final.



0
votes

Mais vous pouvez le faire comme ceci:

select
  ELT(LEAST(count(*),5), '1-2', '1-2', '3-4', '3-4','5+') as buckets,
  dept,
  count(*) as `number of users`
FROM change_log where event in ('logged in')
WHERE event in ('logged in')  
GROUP BY
  dept,
  ELT(LEAST(count((*),5), '1-2', '1-2', '3-4', '3-4','5+');


0 commentaires