포스트

가격대 별 상품 개수 구하기

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

문제

  • 문제 풀이
    • TRUNC()를 사용하여 PRICE를 10000으로 나누고 소수점 이하를 제거하여 PRICE_GROUP으로 만든 쿼리

      1
      2
      3
      4
      
        SELECT TRUNC(PRICE, -4) AS PRICE_GROUP, COUNT(PRODUCT_ID) AS PRODUCTS
        FROM PRODUCT
        GROUP BY TRUNC(PRICE, -4)  
        ORDER BY PRICE_GROUP ASC;
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      
        SELECT 
            CASE 
                WHEN PRICE = 1 THEN '10000'
                WHEN PRICE = 2 THEN '20000'
                WHEN PRICE = 3 THEN '30000'
                WHEN PRICE = 4 THEN '40000' 
                WHEN PRICE = 5 THEN '50000' 
                WHEN PRICE = 6 THEN '60000' 
                WHEN PRICE = 7 THEN '70000' 
                WHEN PRICE = 8 THEN '80000' 
                ELSE '90000' 
            END AS "PRICE_GROUP"
            , COUNT(*) AS "PRODUCTS"
        FROM 
            (SELECT TRUNC(PRICE / 10000) AS "PRICE" FROM PRODUCT)
        GROUP BY 
            PRICE
        ORDER BY 
            "PRICE_GROUP";
      


    • SUBSTR()를 사용하여 PRICE 컬럼에서 첫 번째 문자를 추출하고, 그 값을 10000으로 곱하여 PRICE_GROUP으로 만든 쿼리

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      
        SELECT PRICE_GROUP, COUNT(PRICE_GROUP)
        FROM (
            SELECT SUBSTR(PRICE, 1, 1) * 10000 AS PRICE_GROUP
            FROM PRODUCT
            WHERE PRICE LIKE '0%'
                OR PRICE LIKE '1%'
                OR PRICE LIKE '2%'
                OR PRICE LIKE '3%'
                OR PRICE LIKE '4%'
                OR PRICE LIKE '5%'
                OR PRICE LIKE '6%'
                OR PRICE LIKE '7%'
                OR PRICE LIKE '8%'
                OR PRICE LIKE '9%'
        ) Subquery
        GROUP BY PRICE_GROUP
        ORDER BY PRICE_GROUP;
      
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      
        SELECT SUBSTR(PRICE, 1, 1) * 10000 AS PRICE_GROUP, COUNT(SUBSTR(PRICE, 1, 1) * 10000)
        FROM PRODUCT
        WHERE PRICE LIKE '0%'
            OR PRICE LIKE '1%'
            OR PRICE LIKE '2%'
            OR PRICE LIKE '3%'
            OR PRICE LIKE '4%'
            OR PRICE LIKE '5%'
            OR PRICE LIKE '6%'
            OR PRICE LIKE '7%'
            OR PRICE LIKE '8%'
            OR PRICE LIKE '9%'
        GROUP BY SUBSTR(PRICE, 1, 1) * 10000
        ORDER BY PRICE_GROUP;
      


  • TRUNC (Truncate) 함수는 대부분의 데이터베이스 관리 시스템(DBMS)에서 사용되는 SQL 함수 중 하나로, 숫자를 특정 자릿수로 잘라내거나 버리는 역할을 한다. TRUNC 함수는 주로 숫자를 다양한 방식으로 다루거나 표현할 때 사용된다.
    • TRUNC 함수는 가격 그룹화, 날짜 처리, 금융 계산 등 다양한 데이터베이스 작업에서 유용하게 활용될 수 있다.
    1. 구문: TRUNC(number, decimal_places)
      • number: 잘라내거나 버릴 숫자를 나타내는 표현식이나 열이다.
      • decimal_places (선택 사항): 잘라내려는 소수점 이하 자릿수를 지정한다. 이 값을 생략하면 기본적으로 0으로 간주되어 정수로 버려진다.
    2. 동작:
      • TRUNC 함수는 주어진 숫자를 소수점 이하의 자릿수를 기반으로 잘라낸다. 소수점 이하 자릿수가 양수인 경우, 해당 자릿수만큼 소수점 이하 숫자를 유지하고 나머지 자릿수를 버린다.
      • 소수점 이하 자릿수가 음수인 경우, 숫자를 왼쪽에서부터 해당 자릿수만큼 버린다. 예를 들어, 2로 설정하면 백의 자리까지 버릴 수 있다.
      • 즉, decimal_places가 양수인 경우는 소수점 아래 자릿수를 절사하고, 음수인 경우는 소수점 왼쪽 자릿수를 절사한다.
    3. 예제:
      • TRUNC(123.4567, 2)은 123.4567을 소수점 이하 두 자리까지 유지하고 나머지를 버려서 123.45를 반환한다.
      • TRUNC(9876.54321, -2)은 왼쪽에서부터 두 자릿수를 버려서 9800을 반환한다. 참고 자료


  • 실행 결과

실행 결과

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