1

これが非常に基本的な質問であることはわかっていますが、答えは見つかりませんでした。

タイトルにあるように、特定の列の最大値を保持するレコードをクエリしたいと思います。

それを達成するために次のコードを使用します。

SELECT * FROM `table_name` ORDER BY `column_with_specific_max_value` DESC LIMIT 1

同じ結果を達成する他の方法があるかどうかを知りたいです(より節約的)?SQL には関数 MAX(column) があることは知っていますが、思い通りに機能していません。私はこれを試しました:

SELECT * FROM `table_name` WHERE `column_with_specific_max_value`=MAX(`column_with_specific_max_value`)

この:

SELECT *, MAX(`column_with_specific_max_value`) FROM `table_name`

column_with_specific_max_valueに同じ最大値を持つ 2 つの行がある場合はどうなりますか? 両方の行を返しますか?

4

2 に答える 2

1

どうですか?

select * from table1
where score in (select max(score) from table1)

または:なしでもmax

select * from table1
where score >= all (select score from table1)

それらのいずれも、最大値を持つすべての行を返します。ここで遊ぶことができます。

于 2012-11-23T02:36:34.033 に答える
0

テーブルに自動インクリメント列がある場合は、次のようなことができます...

select
      YT3.*
   from
      ( select
              MAX( YT2.AutoIncColumn ) as ReturnThisRecordID
           from
              ( select max( YT1.WhatColumn ) as MaxColumnYouWant
                   from YourTable YT1 ) JustMax
                 Join YourTable YT2
                    on JustMax.MaxColumnYouWant = YT2.WhatColumn ) FinalRecord
      JOIN YourTable YT3
         on FinalRecord.ReturnThisRecordID = YT3.AutoIncColumn

また、これがインデックスを持つべき列であることを確認します。そうしないと、常にテーブルスキャンを実行することになります。

于 2012-11-23T01:48:45.253 に答える