J'ai une requête comme ceci:MySQL GROUP BY, et tester les éléments regroupés
select a, b, c, group_concat(d separator ', ')
from t
group by a;
Cela semble fonctionner très bien. Si je comprends bien (! Pardonnez-moi, je suis un rookie MySQL), il est de retour des lignes de:
- chaque
a
valeur unique - pour chaque valeur
a
, unb
etc
valeur - aussi pour chaque valeur
a
, toutes les valeurs,d
concaténée en une chaîne
C'est ce que je veux, mais je veux également vérifier que pour chaque a
, le b
et c
sont toujours les mêmes, pour toutes les lignes ayant cette valeur a
.
Ma première pensée est de comparer:
select count(*) from t group by a, b, c;
avec:
select count(*) from t group by a;
et assurez-vous qu'ils sont égaux. Mais je ne me suis pas convaincu que c'est correct, et je ne suis certainement pas sûr qu'il n'y a pas de meilleur moyen. Existe-t-il un idiome SQL/MySQL pour cela?
Merci!
Je ne comprends pas votre dernier commentaire. Oui, dans la requête réelle, je sais que les 'b' et' c' sont arbitraires, c'est pourquoi je veux confirmer indépendamment que chaque 'a' n'a qu'un' b' et un 'c'. Si je «groupe par a», cela me dit combien il y a de «a». Si je groupe par a, b, c, cela me dit combien il y a de triplets uniques (a, b, c). Comment cela manque-t-il de valeur à mon problème? – Ken
@Ken: Votre comparaison vous donne une approximation - cela dépend du nombre de valeurs différentes dans la colonne. Tout ce que je vois que vous pouvez faire est de dire "oui, GROUP BY a, b, c confirme que les valeurs b et c sont possibles" - mais SQL ne renverra pas les valeurs qui n'existent pas dans la colonne, alors quel est le point de la comparaison? –
Ça ne me dit rien du tout: je fais count (*) sur les groupements. Il me dit que le nombre de a est le même que le nombre de (a, b, c) triples. Est-ce que ce n'est pas correct? – Ken