MAX
を使用しています 、これは集計関数です。集計関数には、テーブル内の複数の行をグループとして扱う効果があります。特別なことを何もしなければ、テーブル全体のすべての行が1つの大きなグループとして使用され、MAX
のような集計関数が使用されます。 そこにある場合、これらのすべての行は1つの集約行に凝縮されます。この凝縮効果は、MIN
などの他の集計関数でも発生します。 、SUM
、GROUP_CONCAT
および友人( http://devを参照してください。 mysql.com/doc/refman/5.1/en/group-by-functions.html
)。 GROUP BY
を使用して特定のグループ化を適用することもできます 構築しますが、そうでない場合、集計関数はすべての行を1つの行にまとめます(ただし、このまとめはWHERE
を適用した後に発生します 条件なので、フィルタリングされた行のみが集約されます)
さて、集約関数のこの凝縮または「削減」効果のために、多くの値から1つの値を作成する何らかの方法があります。 MAX
の場合 、その方法は、MAX
に引数として渡した式のすべてのインスタンスで見つかった最大値のみを一覧表示することです。 。ただし、他の列にはそのような集計関数はありません。ほとんどのデータベース製品では、SELECT
に非集計列と集計列の両方が含まれています リストはエラーになります。ただし、MySQLは誤った/異なる動作をし、SELECT
にリストされている集約されていない式ごとに使用可能な値の1つだけを返します。 少し。どの値がmysqlに依存するか-特定のアルゴリズムに依存することはできません。
多くの場合、人々は「最大値を持つ行は何でも」で何かをしたい、言い換えれば、値として最大値を持つ行を見つけ、その行の他の列を集約せずに使用します。 middaparkaによって提供されるソリューションはそれを行い、それを達成する他の方法もあります(MySQLのグループごとの最大値のグーグル)。集計関数と関連するGROUP BY
に関するより一般的な情報 条項、あなたはここで-恥知らずな自己プラグ-私の記事を見ることができます: http://rpbouman.blogspot.com/2007/05/debunking-group-by-myths.html