首页  >  文章  >  数据库  >  使用 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