Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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
- 웹 스크랩핑
- 프로그래머스
- harkerrank
- R
- 내일배움카드
- 텍스트 분석
- 오블완
- 프로젝트
- 티스토리챌린지
- 스파르타코딩
- 중회귀모형
- wil
- 파이썬 철저입문
- 내일배움캠프
- 내일배움
- MySQL
- hackerrank
- Cluster
- 회귀분석
- 파이썬 철저 입문
- 미세먼지
- SQL
- 파이썬 머신러닝 완벽가이드
- 어쩌다 마케팅
- 실전 데이터 분석 프로젝트
- 스파르타
- 파이썬
- 파이썬 머신러닝 완벽 가이드
- TiL
- 스파르타 코딩
Archives
- Today
- Total
OkBublewrap
가격대 별 상품 개수 구하기 본문
<문제 설명>
다음은 어느 의류 쇼핑몰에서 판매중인 상품들의 정보를 담은 PRODUCT 테이블입니다. PRODUCT 테이블은 아래와 같은 구조로 되어있으며, PRODUCT_ID, PRODUCT_CODE, PRICE는 각각 상품 ID, 상품코드, 판매가를 나타냅니다.
Column nameTypeNullable| PRODUCT_ID | INTEGER | FALSE |
| PRODUCT_CODE | VARCHAR(8) | FALSE |
| PRICE | INTEGER | FALSE |
상품 별로 중복되지 않는 8자리 상품코드 값을 가지며 앞 2자리는 카테고리 코드를 나타냅니다.
문제
PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.
예시
예를 들어 PRODUCT 테이블이 다음과 같다면
| PRODUCT_ID | PRODUCT_CODE | PRICE |
| 1 | A1000011 | 10000 |
| 2 | A1000045 | 9000 |
| 3 | C3000002 | 22000 |
| 4 | C3000006 | 15000 |
| 5 | C3000010 | 30000 |
| 6 | K1000023 | 17000 |
만원 단위의 가격대 별로 상품을 나누면
- 가격대가 0원 ~ 1만원 미만인 상품은 PRODUCT_ID 가 2인 상품 1개,
- 가격대가 1만원 이상 ~ 2만원 미만인 상품들은 PRODUCT_ID 가 1, 4, 6인 상품 3개,
- 가격대가 2만원 이상 ~ 3만원 미만인 상품은 PRODUCT_ID 가 3인 상품 1개,
- 가격대가 3만원 이상 ~ 4만원 미만인 상품은 PRODUCT_ID 가 5인 상품 1개,
에 각각 해당하므로 다음과 같이 결과가 나와야 합니다.
| PRICE_GROUP | PRODUCTS |
| 0 | 1 |
| 10000 | 3 |
| 20000 | 1 |
| 30000 | 1 |
<코드>
1) 처음에는 1차원적으로 생각을 했다. 예시 그대로 진행을 할려고 했다.
IF 문으로 나눠서 구간을 만들려고 했다.
SELECT IF(PRICE < 10000, 0,
IF(PRICE < 20000, 10000,
IF(PRICE < 30000, 20000, 30000)))
FROM PRODUCT
이런 식으로 진행을 할려고 했는데 오답 처리가 됬다. 문제를 보니 10000으로 구간을 나누라고 했다.
2) 데이터 보기
SELECT PRICE
FROM PRODUCT
ORDER BY 1 ASC
| PRICE |
| 15000 |
| 19000 |
| 21000 |
| 22000 |
| 31000 |
| 32000 |
| 35000 |
| 42000 |
| 42000 |
| 46000 |
| 46000 |
| 51000 |
| 51000 |
| 51000 |
| 54000 |
| 54000 |
| 55000 |
| 60000 |
| 60000 |
| 61000 |
| 62000 |
| 63000 |
| 65000 |
| 65000 |
| 72000 |
| 72000 |
| 80000 |
| 80000 |
| 82000 |
| 85000 |
10000 구간으로 나누면 10000, 20000, 30000, 40000, 50000, 60000, 70000, 80000이렇게 구간화가 진행이 되어야 한다.
SELECT LEFT(PRICE,1) * 10000, COUNT(*)
FROM PRODUCT
GROUP BY 1
ORDER BY 1 ASC
앞부분 1자리를 가져온 다음 10000을 곱했고, 그룹핑 후 계산을 진행을 했다.
'개발 > SQL' 카테고리의 다른 글
| 오랜 기간 보호한 동물(1) (0) | 2023.03.08 |
|---|---|
| 재구매가 일어난 상품과 회원 리스트 구하기 (0) | 2023.02.27 |
| 자동차 평균 대여 기간 구하기 (0) | 2023.02.27 |
| 자동차 종류 별 특정 옵션이 포함된 자동차 수 구하기 (0) | 2023.02.27 |
| 가격이 제일 비싼 식품의 정보 출력하기 (0) | 2023.02.26 |