重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

投稿 2018/07/17 14:12編集 2018/07/17 15:20
http://tech.pjin.jp/blog/2016/09/11/sql練習問題-問23/
の問題をSQLplusで解いていて、

Select *
From players
Order by height desc
Fetch first 5 rows only
でエラーになります
これはどこを間違えているんでしょか。

Limitでやってエラーになるので、
Select *
From players
Where ROWNUM<=5
だと出力はなりますが、
それじゃない書き方ってありますか?

質問者からの補足コメント

  • 身長の高い選手ベスト5を抽出し、
    名前と身長と体重を表示したいです

      補足日時:2018/07/18 14:52

A 回答 (2件)

> 身長の高い選手ベスト5を抽出し、


> 名前と身長と体重を表示したいです

先日私が書いているSQLで解決すると思いますが、確認されていませんか?
降順ならDESCにすればいいだけです。

SELECT
A.*
FROM
(
SELECT
A.*
, ROW_NUMBER() OVER (ORDER BY A.HEIGHT DESC) AS HEIGHT_ORDER
FROM
PLAYERS A
) A
WHERE
A.HEIGHT_ORDER BETWEEN 1 AND 5
ORDER BY
A.HEIGHT_ORDER

自分で調べて解決できないなら、データベースエンジンが異なる練習問題で学習するのをやめましょう。
MySQLの練習問題なのに、わざわざOracleでやろうとしている意味がわかりません。
    • good
    • 0

FETCH FIRSTってOracle Database 12c (12.1)からなんですが、使ってるOracleデータベースのバージョンのせいじゃないですか。



ちなみに
Select *
From players
Where ROWNUM<=5
これでは、5件抽出しますが、ソートは効きません。
ROWNUMは抽出した順序であって、ソートした順序ではありません。

SELECT
A.*
FROM
(
SELECT
A.*
, ROW_NUMBER() OVER (ORDER BY A.HEIGHT) AS HEIGHT_ORDER
FROM
PLAYERS A
) A
WHERE
A.HEIGHT_ORDER BETWEEN 1 AND 5
ORDER BY
A.HEIGHT_ORDER
    • good
    • 0

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

関連するカテゴリからQ&Aを探す

今、見られている記事はコレ!