2011-10-20 12 views
8

私は次のクエリを書かれている:最初の結果を選択するだけ

SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL 
FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL 
       FROM PURCHASE GROUP BY CLIENTNO) TOTALS 
WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO AND ROWNUM <= 1 
ORDER BY TOTALS.TOTAL DESC; 

それは私に間違った答えを与えているが、私はROWNUM <= 1句を削除する場合は、正しい答えは、結果セットの最上部にあるしかし、 。

この質問では、正しい答えを出すために何を変更できますか?

ありがとう、 アレックス。

EDIT:結果セットの最初の結果を返すようにクエリを欲しいと言ったことを忘れてしまいました。

+2

問題は、データセットがソートされる前にROWNUMが割り当てられていることです。 –

答えて

16

フィルタは、並べ替えの前に適用されます(ROWNUM)。何をする必要がこれです:

SELECT * FROM (
    SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL 
    FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL 
        FROM PURCHASE GROUP BY CLIENTNO) TOTALS 
    WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO 
    ORDER BY TOTALS.TOTAL DESC 
) 
WHERE ROWNUM <= 1 
+0

http://stackoverflow.com/questions/7753936/fetching-data-using-rownum-in-oracle/7754076#7754076 – rahularyansharma

+0

@rahularyansharma。ニースのリンク。それは本当に関連していませんが、そうですか? –

3

ラップ別の外部クエリでROWNUM:

select * from (
SELECT CLIENT.CLIENTNO, CLIENT.CNAME, TOTALS.TOTAL 
FROM CLIENT, (SELECT CLIENTNO, SUM(AMOUNT) AS TOTAL FROM PURCHASE GROUP BY CLIENTNO) TOTALS 
WHERE CLIENT.CLIENTNO = TOTALS.CLIENTNO ORDER BY TOTALS.TOTAL DESC) 
where ROWNUM <= 1; 
関連する問題