プロが教えるわが家の防犯対策術!

今最大値を抽出するSQL文を考えているのですがうまくいきません。
例えば、Sampleテーブル

count | num
-------------
1 | 11
3 | 12
2 | 13
9 | 14
6 | 15

のテーブルでcountが一番大きいnumを取り出したいのですが、どのようにしたらいいのでしょうか?
この場合、countが一番多い9の
num=14を取り出します。

よろしくお願い致します。

A 回答 (3件)

副セレクトですかね。



select num from test where cnt = (select max(cnt) from test)

あと2つくらい別の方法があったと思うのですが、オプティマイザの働きを考えるとこれがいちばん速そうな気がします。
    • good
    • 0

#1です。



全くごもっともです。インデクスがないと今回の用途ではフルスキャンになるため、当然付けているものという思い込みがあり、それが前提条件であることを書くのをすっかり忘れていました。
    • good
    • 0

select top 1 num from sample order by count desc


とすれば、最大のnumが複数ある場合でも、1件のみ表示します。

同率一位のすべてを必要とするなら、
select num from sample where count in (select max(count) from sample)
で良いかと思います。


蛇足ですが..

>#1
>オプティマイザの働きを考えるとこれがいちばん速そうな気がします。

索引の有無により変わりますが、仮にcount列に索引が無い場合は、
(サブクエリを使う)相関問い合わせは不利です。
この場合、num列にも、count列にも索引が付いていれば、
相関問い合わせが一番速いと思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!