일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Andrew NG
- map
- groupby
- 코세라
- orderby
- POP
- 인프런sql강의
- mysql
- DATE_FORMAT
- 코세라강의
- 코세라머신러닝강의
- sorted
- programmers
- coursera
- sql
- 안드류응
- 코세라머신러닝
- Machine Learning
- PYTHON
- sql오답노트
- 머신러닝강의
- 경제공부
- SQL공부
- 머신러닝
- 프로그래머스SQL
- Algorithm
- 프로그래머스
- 알고리즘
- WHERE
- 파이썬
Archives
- Today
- Total
미래를 예측하는 데이터분석가
[MYSQL] 프로그래머스 가격대 별 상품 개수 구하기 본문
SQL 쿼리
SELECT FLOOR(PRICE / 10000) * 10000 AS PRICE_GROUP,
COUNT(*) AS PRODUCTS
FROM PRODUCT
GROUP BY FLOOR(PRICE / 10000)
ORDER BY PRICE_GROUP ASC;
풀이 과정
- 가격 구간 생성:
PRICE
를 10,000으로 나눈 후 내림(floor) 처리하여 가격대를 구합니다.FLOOR(PRICE / 10000) * 10000
을 통해 구간의 최소 금액을 생성합니다.
- 상품 개수 세기:
COUNT(*)
를 사용하여 각 가격대에 해당하는 상품의 개수를 집계합니다.
- 그룹화:
GROUP BY FLOOR(PRICE / 10000)
을 통해 가격대별로 데이터를 그룹화합니다.
- 결과 정렬:
ORDER BY PRICE_GROUP ASC
로 가격대를 기준으로 오름차순 정렬합니다.
예시 데이터 및 실행 결과
PRODUCT 테이블:
PRODUCT_ID | PRODUCT_CODE | PRICE |
---|---|---|
1 | A1000011 | 10000 |
2 | A1000045 | 9000 |
3 | C3000002 | 22000 |
4 | C3000006 | 15000 |
5 | C3000010 | 30000 |
6 | K1000023 | 17000 |
실행 결과:
PRICE_GROUP | PRODUCTS |
---|---|
0 | 1 |
10000 | 3 |
20000 | 1 |
30000 | 1 |
오답노트
1. 오답: ROUND
사용
초기에는 ROUND(PRICE / 10000) * 10000
을 사용했으나, 이는 가격이 15,000처럼 중간 값에 있을 때 잘못된 구간으로 분류될 수 있었습니다.
해결:
FLOOR
를 사용하여 항상 내림 처리로 올바른 구간을 계산.
2. 오답: 정렬 누락
초기 쿼리에서 ORDER BY
를 작성하지 않아 결과가 원하는 순서로 나오지 않았습니다.
해결:
ORDER BY PRICE_GROUP ASC
추가.
정리 및 배운 점
- 가격 구간 분류는
FLOOR
,ROUND
,CEIL
등 적절한 함수 선택이 중요함- 이 문제에서는 항상 내림 처리를 해야 하므로
FLOOR
가 적합
- 이 문제에서는 항상 내림 처리를 해야 하므로
- 그룹화 후에는 정렬 순서를 명확히 지정해야 원하는 결과를 얻을 수 있음
- SQL 작성 시 출력 컬럼명은 문제 요구사항(
PRICE_GROUP
,PRODUCTS
)에 맞게 설정해야함
CASE WEHN으로 모든 구간을 정의하는 것 보다 FLOOR함수와 단순 연산을 사용해 금액 구간을 나누는 것이 가독성면에서 좋았다. FLOOR함수의 쓰임성을 다시금 깨닫게 된 계기가 되었다.
'시스템 & 데이터베이스 > SQL' 카테고리의 다른 글
[SQL 데이터리안] 리텐션에 대한 모든 것 (0) | 2025.01.11 |
---|---|
[SQL] 프로그래머스 자동차 대여 기록에서 대여중/ 대여 가능 여부 구분하기 (0) | 2025.01.10 |
[MYSQL] 프로그래머스 3월 생일 여성 회원 조회하기 (0) | 2024.12.19 |
[MYSQL] 노선별 평균 역 사이 거리 조회하기 (0) | 2024.12.18 |
[인프런] BigQuery (SQL) 입문 #2-(1) 데이터 탐색 - 조건, 추출, 요약 (3) | 2024.12.05 |