Выберите только первый результат - PullRequest
9 голосов
/ 20 октября 2011

Я написал следующий запрос:

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, то правильный ответ будет в верхней части набора результатов.

Так что я могу изменить в этом запросе, чтобы он дал правильный ответ?

Спасибо, Алекс.

РЕДАКТИРОВАТЬ: забыл сказать, что я хочу, чтобы запрос только вернул первый результат в наборе результатов.

Ответы [ 2 ]

16 голосов
/ 20 октября 2011

Фильтр 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 
3 голосов
/ 20 октября 2011

Оберните 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...