본문 바로가기
문제풀이/SQL(My sql)

[문제풀이] 거래가격 조회/가격대 별 상품 개수 구하기

by kime2 2024. 1. 10.
출처

 

문제

USED_GOODS_BOARD와 USED_GOODS_USER 테이블에서 완료된 중고 거래의 총금액이 70만 원 이상인 사람의 회원 ID, 닉네임, 총거래금액을 조회하는 SQL문을 작성해주세요. 결과는 총거래금액을 기준으로 오름차순 정렬해주세요.

문제에 대한 해석

1. 테이블: USED_GOODS_BOARD와 USED_GOODS_USER 조인

2. 조건: 거래완료, 총 거래금액 70만원 이상

3. 조회: 회원 ID, 닉네임, 총거래금액

4. 정렬: 총거래금액 오름차순

 

풀이(MYSQL)

select u.user_id, u.nickname, sum(b.price)
from used_goods_board as b, used_goods_user as u
where b.writer_id = u.user_id
and b.status = 'done'
group by u.user_id
having sum(b.price)>=700000
order by sum(b.price)

작동순서

💡SQL 실행 순서는 From -> Where -> Group by -> Having -> Select -> Order by ->결과반환

  1. FROM 절: used_goods_board 와 used_goods_user 조인
  2. WHERE 절: user_id가 같고, status가 'done'인 경우 필터링
  3. GROUP BY 절: user_id별로 그룹화 하여
  4. HAVING 절: 그룹화된 유저의 price합계가 700000가 넘는 경우 
  5. SELECT 절: 아이디, 닉네임, 합계가격 조회
  6. ORDER BY 절: sum(b.price)오름차순

 

출처

 

문제

PRODUCT 테이블에서 만원 단위의 가격대 별로 상품 개수를 출력하는 SQL 문을 작성해주세요. 이때 컬럼명은 각각 컬럼명은 PRICE_GROUP, PRODUCTS로 지정해주시고 가격대 정보는 각 구간의 최소금액(10,000원 이상 ~ 20,000 미만인 구간인 경우 10,000)으로 표시해주세요. 결과는 가격대를 기준으로 오름차순 정렬해주세요.

문제에 대한 해석

1. 조회: 만단위로 구분하여 가격세그먼트 제작, 새그먼트별 적용되는 상품 개수

2. 그룹: 세그먼트 별 그룹화

 

풀이(MYSQL)

select case when price between 0 and 9999 then 0
        when price between 10000 and 19999 then 10000
        when price between 20000 and 29999 then 20000
        when price between 30000 and 39999 then 30000
        when price between 40000 and 49999 then 40000
        when price between 50000 and 59999 then 50000
        when price between 60000 and 69999 then 60000
        when price between 70000 and 79999 then 70000
        when price between 80000 and 89999 then 80000
        else  90000 end as PRICE_GROUP, count(1) as PRODUCTS
from product
group by PRICE_GROUP
order by PRICE_GROUP

 

다른사람 풀이

SELECT (price - (price % 10000)) PRICE_GROUP, COUNT(*) AS PRODUCTS
FROM product
GROUP BY PRICE_GROUP
ORDER BY PRICE_GROUP;

배운점

  • select 10/3 -> 몫(정수)
  • select floor(10/3) -> 몫(씰수)
  • select 10 % 3 -> 나머지