Requête de base de données : identification des voitures qui réussissent tous les tests
Ce guide montre comment sélectionner efficacement les voitures à partir d'une base de données qui ont réussi un ensemble de tests prédéfinis. Nous allons nous concentrer sur un scénario dans lequel nous devons identifier les voitures dans le tableau passedtest
qui ont réussi tous les tests (A, B, C et D).
Limitations de la IN
Déclaration
Bien que l'instruction IN
soit utile pour vérifier si une valeur existe dans une liste, elle n'est pas adaptée à cette tâche spécifique. L'utilisation de IN
identifierait de manière incorrecte les voitures qui ont réussi ne serait-ce qu'un des tests requis. Une approche plus robuste est nécessaire.
Tirer parti de l'agrégation et du regroupement
La solution réside dans l'utilisation de fonctions d'agrégation et de regroupement. Nous utilisons la fonction COUNT()
pour déterminer le nombre de types de tests distincts réussis par chaque voiture. La clause GROUP BY
organise ensuite les résultats par nom de voiture, nous permettant de compter des tests distincts par voiture.
Filtrage des résultats avec HAVING
La clause HAVING
est cruciale pour filtrer les résultats groupés. Cela nous permet d'isoler les voitures qui ont un nombre de types de tests distincts égal au nombre total de tests requis (quatre, dans ce cas).
La solution SQL
La requête SQL suivante permet d'obtenir le résultat souhaité :
<code class="language-sql">SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4;</code>
Cette requête sélectionne efficacement uniquement les carname
de la table passedtest
qui ont réussi les quatre tests spécifiés.
Élargissement de la requête pour des données complètes
Pour récupérer des détails supplémentaires sur les voitures qui ont réussi tous les tests, une requête imbriquée peut être utilisée :
<code class="language-sql">SELECT * FROM cars WHERE carname IN ( SELECT carname FROM PassedTest GROUP BY carname HAVING COUNT(DISTINCT testtype) = 4 );</code>
Cette requête améliorée récupère toutes les colonnes de la table cars
pour les voitures identifiées comme ayant réussi tous les tests dans la table passedtest
.
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!