Maison  >  Questions et réponses  >  le corps du texte

MySQL : récupérer la somme des lignes groupées à partir des résultats agrégés

Supposons que j'ai des statistiques sur le nombre de visites par utilisateurs dans chaque pays :

La requête est la suivante :

SELECT 
    countries_users.user_id,
    countries.name,
    count(countries_users.id) as count_visit
FROM countries_users
LEFT JOIN countries on countries.id = countries_users.user_id
WHERE countries_users.user_id IN (111, ...)
GROUP BY countries_user.user_id, countries.id

Les résultats sont les suivants :

user_id | countries | count_visit
-------------------------------
111     | Norway    |   5
111     | Japan     |   2
...     | ...       |   ...

Maintenant, normalement, je ferais cela au niveau du code. Cependant, pour une raison stupide, je souhaite ajouter une colonne supplémentaire au jeu de résultats, qui correspond au nombre total de visites de l'utilisateur, quel que soit le pays.

Donc, le résultat deviendra :

user_id | countries | count_visit |  overall_visit
---------------------------------------------------
111     | Norway    |   5         |   7
111     | Japan     |   2         |   7
...     | ...       |   ...       |   ...

P粉978742405P粉978742405235 Il y a quelques jours830

répondre à tous(1)je répondrai

  • P粉819937486

    P粉8199374862024-02-27 13:01:46

    vous aurez peut-être besoin d'une sous-requête

    SELECT 
    cu.user_id,
    c.name AS countries,
    count(cu.id) AS count_visit,
    visitall.total_count_visit AS overall_visit
    FROM countries_users cu
    LEFT JOIN countries c ON c.id = cu.user_id
    LEFT JOIN (
        SELECT user_id, SUM(count(id)) AS total_count_visit
        FROM countries_users
        WHERE user_id IN (111, ...) 
        GROUP BY user_id
    ) AS visitall ON cu.user_id = visitall.user_id
    WHERE cu.user_id IN (111, ...)  
    GROUP BY cu.user_id, c.id, visitall.total_count_visit

    répondre
    0
  • Annulerrépondre