J'ai cette requête et le résultat est dans plusieurs lignes, chacun est un événement et son numéro de compte respectif.Comment joindre tous les COUNT retournés dans plusieurs lignes à une seule ligne (POSTGRESQL)
SELECT u.name, l.event, COUNT (l.event)
FROM log AS l LEFT JOIN user AS u ON u.id = l.userid
GROUP BY u.name, l.event
Le résultat est comme ceci:
------------------------------------------
| user | event | count |
------------------------------------------
| user_1 | event_1 | 12 |
| user_1 | event_2 | 6 |
| user_1 | event_3 | 9 |
| user_2 | event_1 | 16 |
| ... | ... | ... |
Le problème est que j'ai besoin ce compte comme paramètres (colonnes) dans une seule ligne de résultat, où chaque ligne représente un seul utilisateur, quelque chose comme ça :
--------------------------------------------------------------
| user | event_1 | event_2 | event_3 |
--------------------------------------------------------------
| user_1 | 12 | 6 | 9 |
| user_2 | 16 | 0 | 13 |
| ... | ... | ... | ... |
Peut-être que je peux le faire avec une requête de sélection? Avec une sorte de fonction qui fait une boucle ou quelque chose de similaire?
Merci!
EDIT 1: Je ne sais pas les événements pour les écrire dans le code
EDIT 2: Je vois qu'il n'y a pas moyen trivial de le faire avec une simple requête SQL, donc j'utilise python avec pandas géants à fais ceci. Jetez un oeil à How to convert a column of string to numerical?
Vous pouvez utiliser PIVOT. J'ai eu un type de question similaire. PIVOT sur le champ l.event. Besoin de rafraîchir ma syntaxe avant de corriger le code pour vous. –
Rechercher un tableau croisé. Qui est le consommateur de cette requête? Sortie json est le moyen facile de l'avoir complètement dynamique. Est-ce que ça va sortir json? –