ホームページ >データベース >mysql チュートリアル >GROUP BY を使用するときに MySQL の特定のフィールドに WHERE 句を適用する方法

GROUP BY を使用するときに MySQL の特定のフィールドに WHERE 句を適用する方法

Barbara Streisand
Barbara Streisandオリジナル
2024-11-06 00:15:02508ブラウズ

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

WHERE 句は MySQL の特定のフィールドに適用できますか?

WHERE 句を含むクエリを作成する場合、条件を特定のフィールドに制限することができます。分野。あなたのケースでは、特定のユーザーでフィルタリングして、各コースの userHabilitado フィールドを表示しようとしています。ただし、指定されたクエリには必要な WHERE 句が含まれていません。

バージョン 5.7 より前の MySQL の動作

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 を使用するときに MySQL の特定のフィールドに WHERE 句を適用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。