Un utilisateur a rencontré un problème en tentant de filtrer des données dans MySQL à l'aide de la fonction COUNT(*) dans la Clause OÙ. Ils recherchaient une méthode efficace pour accomplir cette tâche sans utiliser d'instruction SELECT imbriquée, car elle peut consommer des ressources importantes.
L'utilisateur a présenté le pseudo-code suivant pour illustrer le résultat souhaité :
SELECT DISTINCT gid FROM `gd` WHERE COUNT(*) > 10 ORDER BY lastupdated DESC
Le problème avec cette approche est que MySQL ne prend pas en charge les fonctions d'agrégation, telles que COUNT(*), dans la clause WHERE. Pour contourner cette limitation, l'utilisateur a exploré la possibilité d'utiliser un SELECT imbriqué pour compter le nombre de lignes pour chaque gid unique, puis filtrer les résultats en conséquence. Cependant, cette méthode a été jugée inefficace et gourmande en ressources.
Heureusement, MySQL propose une solution plus optimisée en utilisant les clauses GROUP BY et HAVING :
SELECT gid FROM `gd` GROUP BY gid HAVING COUNT(*) > 10 ORDER BY lastupdated DESC
Cette requête effectue les étapes suivantes :
En tirant parti des clauses GROUP BY et HAVING, cette approche permet d'obtenir efficacement le résultat souhaité sans recourir à un Instruction SELECT imbriquée, ce qui entraîne des performances et une efficacité améliorées.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3