문제
💡 PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.
테이블 형태
풀이
SELECT FLOOR(PRICE / 10000)*10000 AS PRICE_GROUP
, COUNT(*) AS PRODUCTS
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
- 1️⃣만원 단위의 가격대를 만들고 2️⃣가격대별 상품 개수를 집계해야 한다.
- 1️⃣만원 이하는 0, 만원대는 10000, 2만원대는 20000 … 이므로 가격을 10000으로 나눈 값(ex. 12,000 / 10,000 = 1.2)을 FLOOR 로 소수점 이하 버림(ex. 1.2 → 1)하여 몫을 구한 뒤 10000(ex. 1*10,000=10,000)을 곱해 PRICE_GROUP 을 만들었다
- 2️⃣SELECT문에서 만든 PRICE_GROUP(가격대) 을 GROUP BY 의 기준으로 설정한 뒤 COUNT(*) 로 각 가격대별 제품 개수를 집계해주었다
- 마지막으로 가격대 기준으로 오름차순 정렬될 수 있게 PRICE_GROUP 으로 정렬해주었다
💡암기(MySQL 공식문서)
- GROUP BY, HAVING, ORDER BY에서 SELECT의 AliaS 사용 가능
You can use the alias in GROUP BY, ORDER BY, or HAVING clauses to refer to the column
- WHERE절에서는 SELECT의 AliaS를 사용 불가, 실제 컬럼명만 사용가능
Standard SQL disallows references to column aliases in a WHERE clause. This restriction is imposed because when the WHERE clause is evaluated, the column value may not yet have been determined.
- 쿼리실행순서: FROM → WHERE → GROUP BY → (HAVING) → SELECT → ORDER BY
'SQL > 코딩테스트' 카테고리의 다른 글
[leetcode / MySQL] 184. Department Highest Salary (0) | 2024.01.30 |
---|---|
[프로그래머스 / MySQL] 입양 시각 구하기(1) (0) | 2024.01.30 |
[프로그래머스 / MySQL] 최댓값 구하기 (0) | 2024.01.30 |
[프로그래머스 / MySQL] 어린 동물 찾기 (0) | 2024.01.30 |
[프로그래머스 / MySQL] 동물의 아이디와 이름 (0) | 2024.01.30 |