sql >> データベース >  >> RDS >> Mysql

mysql:select max(score)は関連する行データを返しません

    MAXを使用しています 、これは集計関数です。集計関数には、テーブル内の複数の行をグループとして扱う効果があります。特別なことを何もしなければ、テーブル全体のすべての行が1つの大きなグループとして使用され、MAXのような集計関数が使用されます。 そこにある場合、これらのすべての行は1つの集約行に凝縮されます。この凝縮効果は、MINなどの他の集計関数でも発生します。 、SUMGROUP_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



    1. AtlassianBitbucketを使用したPostgreSQLバージョン管理

    2. SQL Server 2016:テーブルを作成する

    3. SQLServerでサブストリングを取得する

    4. PHP MySQL:PDFをデータベースに保存