Disons que j'ai ce tableau simplifié contenant des données sur les vols de personnes (ID du passager et l'ID de la compagnie, il a volé avec):La comparaison d'un ensemble de valeurs groupées pour se
+-------------+-----------+
| PassengerID | CompanyID |
+-------------+-----------+
| 14 | 1 |
| 14 | 3 |
| 14 | 4 |
| 20 | 1 |
| 20 | 2 |
| 20 | 5 |
| 20 | 5 |
| 36 | 5 |
| 36 | 5 |
| 36 | 5 |
| 41 | 1 |
| 41 | 1 |
| 41 | 2 |
| 41 | 2 |
+-------------+-----------+
Ce que je suis en train de atteindre est d'obtenir tous les passagers qui ont volé avec plus d'une compagnie et qui ont eu le même nombre de vols avec chaque compagnie avec laquelle ils ont volé.
Je vous attendre à obtenir ce résultat:
+-------------+
| PassengerID |
+-------------+
| 14 |
| 41 |
+-------------+
Explication:
BONNE ID:
14 - vola avec 3 entreprises, 1 vol avec chaque
41 - vola avec 2 entreprises, 2 vols avec chaque
est mauvais d'ID:
20 - ont volé avec 3 entreprises mais 2 vols avec une compagnie et 1 vol par d'autres
36 - a volé avec seulement 1 entreprise
J'ai essayé de penser comme je GROUP BY PassengerID et CompanyID tout en ajoutant COUNT CompanyID donc je vais obtenir quelque chose comme ceci:
+-------------+-----------+------------------+
| PassengerID | CompanyID | COUNT(CompanyID) |
+-------------+-----------+------------------+
| 14 | 1 | 1 |
| 14 | 3 | 1 |
| 14 | 4 | 1 |
| 20 | 1 | 1 |
| 20 | 2 | 1 |
| 20 | 5 | 2 |
| 36 | 5 | 3 |
| 41 | 1 | 2 |
| 41 | 2 | 2 |
+-------------+-----------+------------------+
J'avais idée d'utiliser HAVING COUNT (PassengerID)> 1 pour se débarrasser de l'ID 36 mais pour cela je devrais le regrouper à nouveau par PassengerID.
Je voudrais utiliser un autojointure pour comparer COUNT dans les mêmes passagers mais je coincé sur un problème PassengerID 20 parce que autojointure se joindra à ces lignes:
+-------------+-----------+------------------+
| PassengerID | CompanyID | COUNT(CompanyID) |
+-------------+-----------+------------------+
| 20 | 1 | 1 |
| 20 | 2 | 1 |
+-------------+-----------+------------------+
et ignorera la mauvaise ligne avec la même PassengerID:
+-------------+-----------+------------------+
| PassengerID | CompanyID | COUNT(CompanyID) |
+-------------+-----------+------------------+
| 20 | 5 | 2 |
+-------------+-----------+------------------+
Je n'ai pas essayé d'exécuter cette requête, en pensant à la solution possible donc il ne peut pas fonctionner de cette façon.