MySQL : récupérer la somme des lignes groupées à partir des résultats agrégés
P粉978742405
P粉978742405 2024-02-26 23:21:28
1
1
827

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粉978742405
P粉978742405

répondre à tous(1)
P粉819937486

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
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!