포스트

가격이 제일 비싼 식품의 정보 출력하기

https://school.programmers.co.kr/learn/courses/30/lessons/131115

문제

  • 문제 풀이
1
2
3
4
5
-- FOOD_PRODUCT 테이블에서 PRICE가 가장 높은 행을 선택한다. 
-- 바깥 쿼리에서는 FOOD_PRODUCT 테이블에서 가격이 가장 높은 제품을 선택한다.
SELECT *
FROM FOOD_PRODUCT
WHERE PRICE = (SELECT MAX(PRICE) FROM FOOD_PRODUCT);
1
2
3
4
5
6
7
8
-- ROWNUM을 사용하여 정렬된 결과 중 첫 번째 행을 선택
-- FOOD_PRODUCT 테이블에서 PRICE 기준으로 내림차순으로 정렬한 후, 가장 높은 가격을 가진 행 하나만을 선택한다.
SELECT PRODUCT_ID,PRODUCT_NAME,PRODUCT_CD,CATEGORY,PRICE
FROM (SELECT *
      FROM FOOD_PRODUCT 
      ORDER BY PRICE DESC
      )
WHERE ROWNUM=1;
1
2
3
4
5
-- FETCH FIRST n ROWS ONLY를 사용하여 PRICE 열을 기준으로 내림차순 정렬하고, 결과에서 첫 번째 행만 가져온다.
SELECT *
FROM FOOD_PRODUCT
ORDER BY PRICE DESC
FETCH FIRST ROWS ONLY;


  • ROWNUM은 Oracle 데이터베이스에서 사용되는 가상 열(Virtual Column) 중 하나로, 행이 결과 집합에 반환되는 순서를 나타낸다. 일반적으로 ORDER BY 절을 사용하여 결과를 정렬한 다음, ROWNUM을 활용하여 특정 순서의 행을 선택할 때 주로 사용된다.
    1. ROWNUM은 행이 결과 집합에 반환되는 순서를 기준으로 1부터 시작한다.
    2. ROWNUM은 쿼리의 결과가 정렬된 순서대로 부여되며, 특정 순서로 행을 선택하려면 ORDER BY 절이 필요하다.
    3. ROWNUM을 사용하는 경우, 서브쿼리를 사용하여 먼저 정렬된 결과에 대해 ROWNUM을 부여하고, 그 후에 외부 쿼리에서 해당 결과를 사용하는 패턴이 일반적이다.
    1
    2
    3
    4
    5
    6
    7
    
      SELECT *
      FROM (
        SELECT *
        FROM your_table
        ORDER BY some_column
      )
      WHERE ROWNUM <= 10;
    
    • 위의 예제에서는 some_column을 기준으로 정렬된 결과 중에서 처음 10개의 행을 선택한다.


  • FETCH FIRST n ROWS ONLY는 SQL에서 결과 집합에서 특정 개수의 행만을 반환하도록 지정하는 구문이다. 이 구문은 주로 정렬된 결과에서 가장 상위의 행을 선택할 때 사용된다. 주로 Oracle, DB2, PostgreSQL, SQL Server 등에서 사용된다.

    1
    2
    3
    
      SELECT * FROM table_name
      ORDER BY column_name [ASC | DESC]
      FETCH FIRST n ROWS ONLY;
    
    • FETCH FIRST n ROWS ONLY: 결과에서 반환할 행의 수를 지정한다. n은 반환하려는 행의 개수이다.
    1
    2
    3
    4
    
      -- 가격이 높은 상위 3개의 식품을 조회하는 Oracle 쿼리
      SELECT * FROM FOOD_PRODUCT
      ORDER BY PRICE DESC
      FETCH FIRST 3 ROWS ONLY;
    
    • 이렇게 하면 FOOD_PRODUCT 테이블에서 PRICE 열을 기준으로 내림차순 정렬하여 상위 3개의 행만을 반환한다.


  • 실행 결과

실행 결과

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.