본문 바로가기
Coding Test/SQL Coding Test

[프로그래머스 / SQL] - 가격대 별 상품 개수 구하기

by nam_ji 2024. 3. 4.

가격대 별 상품 개수 구하기

문제

  • 쇼핑몰의 상품 정보가 담긴 PRODUCT 테이블이 있습니다.
    1. 태이블에서 만원 단위로
    2. 가격대 별로
    3. 상품 개수를
    4. 각각 PRICE_GROUP, PRODUCTS라는 컬럼명으로 출력하는 문제입니다.
    5. 예를 들어 1만원 이상 2만원 미만인 경우 10000으로 표시합니다.


프로그래머스 코드

  • 두가지의 방법으로 풀어봤습니다.
  • SELECT문에 조회할 컬럼을 작성하는데 가격별 개수를 출력해야 하기 때문에 CASE 함수를 사용했습니다.
  • CASE 함수에는 1만원 이상 2만원 미만 이렇게 10만원까지 작성하여 표시되는 금액을 정하여 작성합니다.
  • CASE 함수 마지막에는 출력될 컬럼명을 작성하고 COUNT는 전체의 개수를 구할 수 있게 *을 사용했습니다.
  • 이제 FROM절을 이용하여 조회할 컬럼이 담긴 테이블명을 작성하고
  • GROUP BY로 조회할 컬럼 전체를 하나씩 출력할 수 있게 하고
  • ORDER BY를 이용하여 정렬 방식을 정해줬습니다.
  • 다른 방법으로
  • SELECT문에 조회할 컬럼을 작성하는데 PRICE의 가격을 10000으로 나눠 1만 자리의 값만 추출하고 거기에 10000을 곱하여 가격대 별로 출력될 수 있게 작성하고 컬럼명은 alias를 이용하여 PRICE_GROUP 출력될 수 있게 지정하였습니다.
  • COUNT에 *을 전체 개수를 카운트하게 하고 AS를 이용하여 출력될 컬럼명을 PRODUCTS로 지정하였습니다.
  • FROM절을 이용하여 출력할 컬럼이 담긴 테이블명을 작성하고
  • 내가 조회할 컬럼이 지정한 조건에 맞게 전체가 출력될 수 있도록 GROUP BY를 이용하고
  • ORDER BY절을 통해 정렬을 해주었습니다.
-- 코드를 입력하세요
# SELECT
#     CASE 
#         WHEN (0 < PRICE) AND (PRICE < 10000) THEN 0
#         WHEN (10000 <= PRICE) AND (PRICE < 20000) THEN 10000
#         WHEN (20000 <= PRICE) AND (PRICE < 30000) THEN 20000
#         WHEN (30000 <= PRICE) AND (PRICE < 40000) THEN 30000
#         WHEN (40000 <= PRICE) AND (PRICE < 50000) THEN 40000
#         WHEN (50000 <= PRICE) AND (PRICE < 60000) THEN 50000
#         WHEN (60000 <= PRICE) AND (PRICE < 70000) THEN 60000
#         WHEN (70000 <= PRICE) AND (PRICE < 80000) THEN 70000
#         WHEN (80000 <= PRICE) AND (PRICE < 90000) THEN 80000
#         WHEN (90000 <= PRICE) AND (PRICE < 100000) THEN 90000
#     END AS PRICE_GROUP,
#     COUNT (*)
# FROM PRODUCT
# GROUP BY PRICE_GROUP
# ORDER BY PRICE_GROUP

SELECT 
    FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP,
    COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP