- ベストアンサー
最大値の抽出
今最大値を抽出するSQL文を考えているのですがうまくいきません。 例えば、Sampleテーブル count | num ------------- 1 | 11 3 | 12 2 | 13 9 | 14 6 | 15 のテーブルでcountが一番大きいnumを取り出したいのですが、どのようにしたらいいのでしょうか? この場合、countが一番多い9の num=14を取り出します。 よろしくお願い致します。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
副セレクトですかね。 select num from test where cnt = (select max(cnt) from test) あと2つくらい別の方法があったと思うのですが、オプティマイザの働きを考えるとこれがいちばん速そうな気がします。
その他の回答 (2)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
#1です。 全くごもっともです。インデクスがないと今回の用途ではフルスキャンになるため、当然付けているものという思い込みがあり、それが前提条件であることを書くのをすっかり忘れていました。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
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列にも索引が付いていれば、 相関問い合わせが一番速いと思います。