Heim > Datenbank > MySQL-Tutorial > Hauptteil

Wie wende ich eine WHERE-Klausel auf ein bestimmtes Feld in MySQL an, wenn ich GROUP BY verwende?

Barbara Streisand
Freigeben: 2024-11-06 00:15:02
Original
443 Leute haben es durchsucht

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

Kann eine WHERE-Klausel auf ein bestimmtes Feld in MySQL angewendet werden?

Beim Erstellen einer Abfrage, die eine WHERE-Klausel enthält, ist es möglich, die Bedingung auf ein bestimmtes Feld zu beschränken Feld. In Ihrem Fall versuchen Sie, das Feld „userHabilitado“ für jeden Kurs anzuzeigen, gefiltert nach einem bestimmten Benutzer. Die bereitgestellte Abfrage enthält jedoch nicht die gewünschte WHERE-Klausel.

Verhalten von MySQL vor Version 5.7

Vor MySQL 5.7 war eine Einstellung namens ONLY_FULL_GROUP_BY standardmäßig deaktiviert. Dadurch konnte eine Group by-Klausel mit nicht aggregierten Spalten (NON AGGS) kombiniert werden, die nicht Teil der Group by waren. Infolgedessen gibt die Abfrage möglicherweise falsche oder mehrdeutige Daten zurück.

MySQL 5.7 und höher

In MySQL 5.7 und höher ist ONLY_FULL_GROUP_BY standardmäßig aktiviert. Dies erfordert, dass alle NON AGGS in die Group by-Klausel aufgenommen werden, um Datenungenauigkeiten zu verhindern.

Beispiel

Betrachten Sie die folgende Beispielabfrage:

<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>
Nach dem Login kopieren

Diese Abfrage verwendet die MAX(IF())-Funktion zur Konditionierung der Aggregation des userHabilitado-Felds. Es prüft, ob die usuarios.userID mit der angegebenen Benutzer-ID (70) übereinstimmt und gibt den entsprechenden userHabilitado-Wert zurück, andernfalls wird NULL zurückgegeben. Durch die Aufnahme von MAX() in die GROUP BY-Klausel können wir das bedingte aggregierte Ergebnis für jede CursoID beibehalten.

Das obige ist der detaillierte Inhalt vonWie wende ich eine WHERE-Klausel auf ein bestimmtes Feld in MySQL an, wenn ich GROUP BY verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage