Maison > base de données > tutoriel mysql > 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
Libérer: 2024-11-06 00:15:02
original
498 Les gens l'ont consulté

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>
Copier après la connexion

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!

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