首頁  >  文章  >  資料庫  >  使用 GROUP BY 時如何將 WHERE 子句套用至 MySQL 中的特定欄位?

使用 GROUP BY 時如何將 WHERE 子句套用至 MySQL 中的特定欄位?

Barbara Streisand
Barbara Streisand原創
2024-11-06 00:15:02371瀏覽

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

WHERE 子句可以套用在 MySQL 中的特定欄位嗎?

建立包含 WHERE 子句的查詢時,可以將條件限制為特定場地。在您的例子中,您嘗試顯示每個課程的 userHabilitado 字段,並由特定使用者篩選。但是,提供的查詢不包含所需的 WHERE 子句。

MySQL 5.7 版本之前的行為

在 MySQL 5.7 之前,預設會停用名為 ONLY_FULL_GROUP_BY 的設定。這允許 group by 子句與不屬於 group by 的非聚合列 (NON AGGS) 組合。因此,查詢可能會傳回不正確或不明確的資料。

MySQL 5.7 及更高版本

在 MySQL 5.7 及更高版本中,預設為啟用 ONLY_FULL_GROUP_BY。這要求將所有 NON AGGS 包含在 group by 子句中,以防止資料不準確。

範例

考慮以下範例查詢:

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

此查詢使用MAX(IF()) 函數用於條件化 userHabilitado 欄位的聚合。它檢查 usuarios.userID 是否與提供的使用者 ID (70) 相符並傳回相應的 userHabilitado 值,否則傳回 NULL。透過在 GROUP BY 子句中包含 MAX(),我們能夠保留每個 cursoID 的條件聚合結果。

以上是使用 GROUP BY 時如何將 WHERE 子句套用至 MySQL 中的特定欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn