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
987 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 :

<code class="language-sql">SELECT carname
FROM PassedTest
GROUP BY carname
HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname);</code>
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 :

<code class="language-sql">SELECT *
FROM cars
WHERE carname IN (
    SELECT carname
    FROM PassedTest
    GROUP BY carname
    HAVING COUNT(DISTINCT testtype) = (SELECT COUNT(*) FROM PassedTest GROUP BY carname)
);</code>
Copier après la connexion

Alternative :

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

<code class="language-sql">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);</code>
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!

source:php.cn
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