Maison  >  Article  >  base de données  >  Comment appliquer une clause WHERE à un champ spécifique dans MySQL lors de l'utilisation de GROUP BY ?

Comment appliquer une clause WHERE à un champ spécifique dans MySQL lors de l'utilisation de GROUP BY ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-06 00:15:02371parcourir

How to Apply a WHERE Clause to a Specific Field in MySQL When Using GROUP BY?

Une clause WHERE peut-elle être appliquée à un champ spécifique dans MySQL ?

Lors de la création d'une requête qui inclut une clause WHERE, il est possible de restreindre la condition à un champ spécifique champ. Dans votre cas, vous essayez d'afficher le champ userHabilitado pour chaque cours, filtré par un utilisateur spécifique. Cependant, la requête fournie n'inclut pas la clause WHERE souhaitée.

Comportement de MySQL avant la version 5.7

Avant MySQL 5.7, un paramètre appelé ONLY_FULL_GROUP_BY était désactivé par défaut. Cela permettait de combiner une clause group by avec des colonnes non agrégées (NON AGGS) qui ne faisaient pas partie du group by. Par conséquent, la requête peut renvoyer des données incorrectes ou ambiguës.

MySQL 5.7 et au-delà

Dans MySQL 5.7 et versions ultérieures, ONLY_FULL_GROUP_BY est activé par défaut. Cela nécessite que tous les NON AGGS soient inclus dans la clause group by, évitant ainsi les inexactitudes des données.

Exemple

Considérez l'exemple de requête suivant :

<code class="sql">SELECT
  cursos.cursoID AS idcurso,
  cursos.estadoCurso,
  GROUP_CONCAT(cursosUsuarios.userID SEPARATOR ',') AS usuarios,
  MAX(IF(usuarios.userID = 70, cursosUsuarios.userHabilitado, NULL)) AS userHabilitado
FROM cursos
LEFT JOIN cursosUsuarios
  ON cursos.cursoID = cursosUsuarios.cursoID
LEFT JOIN usuarios
  ON cursosUsuarios.userID = usuarios.userID
WHERE
  cursos.estadoCurso = 'abierto'
GROUP BY
  cursos.cursoID;</code>

Cette requête utilise le Fonction MAX(IF()) pour conditionner l'agrégation du champ userHabilitado. Il vérifie si usuarios.userID correspond à l'ID utilisateur fourni (70) et renvoie la valeur userHabilitado correspondante, sinon il renvoie NULL. En incluant MAX() dans la clause GROUP BY, nous sommes en mesure de conserver le résultat agrégé conditionnel pour chaque cursoID.

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