Использование count (*) с rownum - PullRequest
0 голосов
/ 11 октября 2018

Я хочу посчитать количество раз запроса и заказа клиента и отображать только первые 10 результатов.Я использую функции count и rownum, как показано ниже, но подсчет порядка не реализован в коде.Пожалуйста, смотрите мой код ниже, и я буду признателен за любые советы по устранению проблемы.Благодарю вас.

SET SERVEROUT ON
create or replace procedure total is
begin
for a in (select customer_no, count(*) as total from orders where rownum <= 
10 group by customer_no)
loop
dbms_output.put_line('customer number '||a.customer_no|| ' total orders 
'||a.total);

end loop;
end;
/
execute total;
drop procedure total;

Выходная выборка с rownum

Procedure TOTAL compiled

customer number 1062 total orders 1
customer number 1054 total orders 1
customer number 1051 total orders 1
customer number 1060 total orders 1
customer number 1052 total orders 1
customer number 1059 total orders 1
customer number 1061 total orders 1
customer number 1055 total orders 1
customer number 1053 total orders 1
customer number 1058 total orders 1


PL/SQL procedure successfully completed.
Procedure TOTAL dropped.

Выходная выборка без rownum:

Procedure TOTAL compiled

customer number 1098 total orders 25
customer number 1041 total orders 11
customer number 1000 total orders 18
customer number 1003 total orders 16



PL/SQL procedure successfully completed.


Procedure TOTAL dropped.

1 Ответ

0 голосов
/ 11 октября 2018

Вам просто нужно 10 строк, не заботясь о том, в каком 10 или в каком порядке они находятся?

SELECT *
FROM (SELECT customer_no, count(*) AS total
      FROM orders
      GROUP BY customer_no)
WHERE rownum <= 10;

Пример

(Oracle 12 по сообщениям поддерживаетСинтаксис FETCH FIRST для возврата заданного количества строк, но у меня нет способа проверить это)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...