programing

Oracle SQL에서 결과를 한 행으로 제한하는 방법

css3 2023. 8. 23. 21:55

Oracle SQL에서 결과를 한 행으로 제한하는 방법

성공적으로 실행되는 이 쿼리가 있습니다.

SELECT customerNumber
FROM ORDERS 
GROUP BY customerNumber 
ORDER BY count(orderNumber) DESC

그러나 반환되는 행 수를 1로 제한하려고 하면 다음 오류가 발생합니다.

ORA-00933: SQL command not properly ended 

제가 시도한 것은 다음과 같습니다.

SELECT customerNumber
FROM ORDERS 
GROUP BY customerNumber 
ORDER BY count(orderNumber) DESC
fetch first 1 row only;

그리고.

SELECT customerNumber
FROM ORDERS 
GROUP BY customerNumber 
ORDER BY count(orderNumber) DESC
WHERE ROWNUM=1;

Oracle에서는 먼저 주문을 수행한 후 다음을 선택해야 합니다.rownum따라서 정렬된 데이터를 반환하는 쿼리를 중첩하고 필터링을 수행해야 합니다.WHERE외부 조항

SELECT * FROM
(
 SELECT customerNumber
 FROM ORDERS 
 GROUP BY customerNumber 
 ORDER BY count(orderNumber) DESC
) resultSet
WHERE ROWNUM=1;

그룹화 기능과 창 기능을 결합하여 이를 수행할 수 있습니다.

select customernumber, num_orders
from (
  SELECT customerNumber, 
         count(*) as num_orders,
         dense_rank() over (order by count(*) desc) as rnk
  from orders
  group by customerNumber
) t
where rnk = 1;

단순한 "한 행만 가져오기"와 다른 점은 주문 수가 동일한 여러 고객도 반환한다는 것입니다.원하지 않는 경우 대체dense_rank()와 함께row_number()

다음 순서 앞에 조건을 배치해야 합니다(그러나 정렬이 완료된 후 첫 번째 행이 필요한 것 같습니다).

그래서 당신은 선택을 사용해야 합니다.

  select * from (
    SELECT customerNumber
    FROM ORDERS 
    GROUP BY customerNumber 
    ORDER BY count(orderNumber) DESC
  ) t 
  WHERE ROWNUM=1; 

언급URL : https://stackoverflow.com/questions/41220882/how-to-limit-the-results-to-1-row-in-oracle-sql