MySQL: Summe gruppierter Zeilen aus aggregierten Ergebnissen abrufen
P粉978742405
P粉978742405 2024-02-26 23:21:28
1
1
865

Angenommen, ich habe Statistiken über die Anzahl der Besuche von Benutzern in jedem Land:

Die Abfrage lautet wie folgt:

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

Die Ergebnisse sind wie folgt:

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

Normalerweise würde ich das auf Codeebene tun. Aus irgendeinem dummen Grund möchte ich jedoch eine zusätzliche Spalte zur Ergebnismenge hinzufügen, die die Gesamtzahl der Besuche des Benutzers angibt, unabhängig vom Land.

Das Ergebnis wird also sein:

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

P粉978742405
P粉978742405

Antworte allen(1)
P粉819937486

may you need a subquery

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
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage