코딩테스트 연습 - 가격대 별 상품 개수 구하기 | 프로그래머스 스쿨 (programmers.co.kr)
PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.
PRODUCT_ID | PRODUCT_CODE | PRICE |
1 | A1000011 | 10000 |
2 | A1000045 | 9000 |
3 | C3000002 | 22000 |
4 | C3000006 | 15000 |
5 | C3000010 | 30000 |
6 | K1000023 | 17000 |
SELECT TRUNCATE(PRICE / 10000,0)*10000 "PRICE_GROUP", COUNT(PRICE) "PRODUCTS"
FROM PRODUCT
GROUP BY TRUNCATE(PRICE / 10000,0)*10000
ORDER BY TRUNCATE(PRICE / 10000,0)*10000 ASC;
TRUNCATE 함수 TRUNCATE(N, n)
-숫자데이터를 지정한 자리(n)아래(->방향)로 절삭(=제거)하여 반환 (n을 기재하지 않을 경우 소수점 이하는 all삭제)
-n값이 음수이면 소수점 왼쪽 n자리에서 절삭한 값 출력
EX) TRUNCATE(-4.32,1)= -4.3 / TRUNCATE(-4.3) = -4 / TRUNCATE(123.17,1)=123.1
-소수점 단위가 긴 값을 줄여서 보여줘야 할 때 사용할 수 있겠다
EX) TRUNCATE(9000 / 10000) = 0.9 에서 소수점 이하 자릿수를 제거하므로 0
TRUNCATE(22000 / 10000,0) = 2.2 에서 소수점 이하 자릿수를 제거하므로 2
논리
0~9900원, 10000원에서 19900원, 20000원에서 29900원 을 각각 0원 10000원 20000원으로 자르는 방법은
GROUP BY함수엔 별칭을 쓸 수 없으므로 식 그자체로 넣음
SELECT TRUNC(PRICE, -4) AS PRICE_GROUP, COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY TRUNC(PRICE, -4)
ORDER BY PRICE_GROUP ASC
TRUNCATE 함수 를 이렇게도 쓸 수 있구나
TRUNCATE 함수 소수점 지정 자리에 -가 들어가면 소수점 왼쪽기준 N 자릿수만 남기도록 함EX) TRUNCATE(254.55, -2) = 200
TRUNC(9000,-4) = 소수점 왼쪽 4번째 자리에서 절삭
SELECT floor(price / 10000) * 10000 as PRICE_GROUP, count(*) as PRODUCTS
from PRODUCT
group by floor(price / 10000) * 10000
order by 1;
CEIL 함수
크거나 같은 정수 중 가장 작은 값 출력
ex)floor(123.17)=124
ex) floor(0.9)=1
ex) floor(-1.15)= -1
Floor 함수
작거나 같은 정수 중 가장 큰 값
ex) floor(123.17)=123
ex) floor(0.9)=0
ex) floor(-1.15)= -2
*더 많은 예시 참조 블로그
https://blog.naver.com/gochalifecore/223061055796
범위 지정 후 사이값을 도출해야 될 땐
서브쿼리로 SELECT CASE WHEN ~ 구문을 넣으면 더 복잡해지므로
가능하면 숫자함수를 응용하여 사용하는 게 더 용이
'SQL 문제풀이' 카테고리의 다른 글
Customers Who Never Order - 주문을 하지 않은 고객의 이름 추출 (0) | 2023.10.10 |
---|---|
GROUP BY절, INNER JOIN (0) | 2023.10.03 |
상품 별 오프라인 매출 구하기 (0) | 2023.10.02 |
순위 함수 (0) | 2023.09.21 |
[GROUP BY] 고양이와 개는 몇 마리 있을까 (0) | 2023.09.19 |