Récupérer les lignes MySql avec la même valeur de colonne
P粉4640884372023-11-10 21:53:39
0
2
861
Considérons le tableau suivant-
ID Score
1 95
2 100
3 88
4 100
5 73
Je suis un novice complet en SQL, mais comment puis-je renvoyer un score contenant les ID 2 et 4 ?
Il devrait donc renvoyer 100 puisqu'il apparaît à la fois dans les ID 2 et 4
SELECT score
FROM t
WHERE id in (2, 4)
HAVING COUNT(*) = 2 /* replace this with the number of IDs */
Cela sélectionnera les lignes avec les ID 2 et 4. Ensuite, la clause HAVING garantit que l'on trouve les deux lignes ; si l'une d'elles manque, le décompte sera inférieur à 2.
Ceci est un exemple de requête « ensemble dans un ensemble ». Je recommande d'utiliser la clause having pour l'agrégation car c'est la méthode la plus flexible.
select score
from t
group by score
having sum(id = 2) > 0 and -- has id = 2
sum(id = 4) > 0 -- has id = 4
Ce que cela fait est agrégé par score. Ensuite, la première partie de la clause having 子句的第一部分 (sum(id = 2) (sum(id = 2)) compte le nombre de "2" qu'il y a dans chaque fraction. Le deuxième est le chiffre « 4 ». Seuls les scores « 2 » et « 4 » sont renvoyés.
Cela sélectionnera les lignes avec les ID 2 et 4. Ensuite, la clause
HAVING
garantit que l'on trouve les deux lignes ; si l'une d'elles manque, le décompte sera inférieur à 2.Cela suppose que
id
est la seule colonne.Ceci est un exemple de requête « ensemble dans un ensemble ». Je recommande d'utiliser la clause
having
pour l'agrégation car c'est la méthode la plus flexible.Ce que cela fait est agrégé par score. Ensuite, la première partie de la clause
having
子句的第一部分 (sum(id = 2)
(sum(id = 2)
) compte le nombre de "2" qu'il y a dans chaque fraction. Le deuxième est le chiffre « 4 ». Seuls les scores « 2 » et « 4 » sont renvoyés.