본문 바로가기
「SQL초급떼기

코딩테스트 연습GROUP BY가격대 별 상품 개수 구하기

by DayGo 2023. 4. 2.

https://school.programmers.co.kr/learn/courses/30/lessons/131530#qna

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

round

ceil

floor

truncate 

case when 까지 별여별 함수를 다 써서 테스트 해보다가 

 

결국 floor, truncate 함수로 귀결!!!!

 

** 연습해본 쿼리

 

-- PRODUCT 테이블

1. 데이터 확인해보기
SELECT  round(PRICE/10000,0)*10000 as price_group ,count(*) as cnt
from PRODUCT 
group by  price_group
order by price_group desc

SELECT  price,round(PRICE/10000,0)*10000 as price_group ,ceil(PRICE/10000) as price_group2,
PRICE/10000 as price_group3
from PRODUCT 
group by  price_group
order by price_group desc




SELECT price, round(PRICE/10000,0) ,  round(PRICE/10000,0)*10000 as price_group
from PRODUCT 


SELECT 
case when  round(PRICE/10000,0)*10000<10000 then '1만원미만'
     when  round(PRICE/10000,0)*10000<20000 then '1만원미만'
     when  round(PRICE/10000,0)*10000<30000 then '1만원미만'
     when  round(PRICE/10000,0)*10000<40000 then '1만원미만'
     when  round(PRICE/10000,0)*10000<50000 then '1만원미만'


-- 코드를 입력하세요
SELECT  TRUNCATE((price / 10000),0) * 10000 AS PRICE_GROUP , COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC


SELECT  floor(price / 10000) * 10000 as PRICE_GROUP, count(*) as PRODUCTS
    from PRODUCT
    group by floor(price / 10000) * 10000
    order by 1;


-- PRODUCT 테이블
SELECT  
case when 0<PRICE<10000 then '1만원미만' 
     when  10000<=PRICE<20000 then '2만원미만' 
     when  20000<=PRICE<30000 then '3만원미만' 
     when  30000<=PRICE<40000 then '4만원미만' 
     when  40000<=PRICE<50000 then '5만원미만' 
     when  50000<=PRICE<60000 then '6만원미만' 
     when  60000<=PRICE<70000 then '7만원미만' 
     when  70000<=PRICE<80000 then '8만원미만' 
     when  80000<=PRICE<90000 then '9만원미만' 
     else '9만원이상' end as price_group , 
     count(product_id) as PRODUCTS
     
from PRODUCT 
group by price_group 
order by price_group

 

 

 

-- 코드를 입력하세요
-- PRODUCT 테이블

-- price 가 19000 의경우, round 는 20000, ceil 함수 20000, floor 는 10000, truncate 10000
-- 따라서 floor 함수 또는 truncate 함수만 써야함


SELECT price, 
round(PRICE/10000)*10000 as price_group_r, -- 반올림
ceil(PRICE/10000)*10000 as price_group_c, -- 무조건 소수점 첫째에서 올림 - 이것은 절대 쓰면 안됨
floor(PRICE/10000)*10000 as price_group_f, -- 내림
TRUNCATE((price / 10000),0) * 10000 AS PRICE_GROUP_t,
     count(product_id) as PRODUCTS
     
from PRODUCT 
group by price_group_r
order by price_group_r

 

 

차이를 보면 알수 있다!!!! ceil은 절대 쓰면안됨!!! 무조건 올림

 

 

정답1

-- 코드를 입력하세요
-- PRODUCT 테이블

-- price 가 19000 의경우, round 는 20000, ceil 함수 20000, floor 는 10000, truncate 10000
-- 따라서 floor 함수 또는 truncate 함수만 써야함
SELECT 
floor(PRICE/10000)*10000 as price_group_f, -- 내림
     count(product_id) as PRODUCTS
     
from PRODUCT 
group by price_group_f
order by price_group_f

 

정답2

SELECT  TRUNCATE((price / 10000),0) * 10000 AS PRICE_GROUP , COUNT(PRODUCT_ID) AS PRODUCTS
FROM PRODUCT
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP ASC

댓글