Maison > base de données > tutoriel mysql > Comment puis-je trouver des voitures qui ont réussi tous les tests répertoriés ?

Comment puis-je trouver des voitures qui ont réussi tous les tests répertoriés ?

Patricia Arquette
Libérer: 2025-01-14 10:40:43
original
1063 Les gens l'ont consulté

How Can I Find Cars That Passed All Listed Tests?

Trouvez les voitures qui ont réussi tous les tests de la liste de tests

Cette tâche nécessite d'identifier les voitures du tableau « voitures » qui ont réussi tous les tests répertoriés dans le tableau « passedtest ». Bien qu'une simple instruction IN puisse récupérer les voitures qui réussissent n'importe quel test, l'exigence est de garantir que chaque voiture réussit tous tests de la liste.

Pour y parvenir, nous pouvons utiliser une combinaison d'agrégation (GROUP BY, HAVING) et de théorie des ensembles.

Solution :

SELECT carname
FROM PassedTest
GROUP BY carname
HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname);
Copier après la connexion

Explication :

  • La sous-requête (SELECT COUNT(*) FROM PassedTest GROUP BY carname) renvoie le nombre total de tests uniques par voiture.
  • HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname) vérifie si le nombre de différents types de tests d'une voiture est égal au nombre total de tests, garantissant que la voiture a réussi tous essais.

Pour inclure les données de la table "cars", vous pouvez utiliser l'instruction interne :

SELECT *
FROM cars
WHERE carname IN (
    SELECT carname
    FROM PassedTest
    GROUP BY carname
    HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname)
);
Copier après la connexion

Alternative :

Une autre option consiste à utiliser l'opération JOIN :

SELECT DISTINCT c.carname
FROM cars c
JOIN PassedTest pt ON c.carname = pt.carname
GROUP BY c.carname
HAVING COUNT(*) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname);
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal