SQL 기초 - 그룹 피터링과 정렬

Group by 사용 시 추가로 활용할수 있는 조건에는 아래와 같은 내용이 있다.

HAVING : GROUP BY를 통해 추출된 쿼리에 대해 필터링을 거는 구문으로 WHERE 조건과 비슷한 역할은 한다. 

ORDER BY : GROUP BY를 통해 추출된 쿼리에 대해 정렬 순서를 정하는 구문으로 DESC내림차순 ASC 오름차순 정렬이다. 이 ORDER BY 절은 굳이 GROUP BY 구문이 아닌 평범한 셀렉 문에서도 사용할 수 있다.

LIMIT : GROUP BY를 통해 추출된 쿼리를 특정 조건에 대해서 원하는 수량만 추출하는 조건문이다. 다만, LIMIT은 오라클에서는 작동은 안하는 것으로 알고 있고, ROWNUM을 대신사용해야 하는것으로 알고는 있다.....


자 이제 다시 컬리 DB를 사용해서 아래의 문제를 풀어보자


1. 결제 테이블에서 수단별 평균 결제 금액이 36000원 이상인 것만 조회 하시오

select ptype, avg(amount) from payments

group by ptype

having avg(amount) >= 36000 ; 

여기 결과에서 소수점이 보기 싫은 경우 AVG(AMOUNT)에 ROUND를 추가해서 조회하면된다.

ROUND(AVG(AMOUNT, 0)


2. 상품명과 각격을 기준으로 누적판매정보를 조회 한후 아래 문제를 푸시오.

2-1. 누적매출이 35,000인 상품을 조회하시오

select pr.name, pr.price, sum(od.count), sum(pr.price*od.count) from products pr

left join order_details od

on pr.id = od.product_id 

group by pr.name, pr.price

having sum(pr.price*od.count) >= 35000 ; 

2-2. 누적 매출이 2만원 이상이면서 누적판매량도 10개 이상인 상품을 조회 

select pr.name, pr.price, sum(od.count), sum(pr.price*od.count) from products pr

left join order_details od

on pr.id = od.product_id 

group by pr.name, pr.price

having sum(pr.price*od.count) >= 20000 and sum(od.count) >= 10 ; 


2-3. 누적 매출이 없는 제품을 가격을 기준을 오름차순으로 정렬하여 조회

select pr.name, pr.price, sum(od.count), sum(pr.price*od.count) from products pr

left join order_details od

on pr.id = od.product_id 

group by pr.name, pr.price  

having sum(od.count) is null 

order by pr.price asc ; 


2-4. 누적 매출 상위 5개 제품을 조회 하시오 

select pr.name, pr.price, sum(od.count), sum(pr.price*od.count) from products pr

left join order_details od

on pr.id = od.product_id 

group by pr.name, pr.price  

having sum(pr.price * od.count) is not null

order by sum(pr.price * od.count) desc

limit 5 ;



2-5 누적 판매 상위 5개 제품을 조회하오.

select pr.name, pr.price, sum(od.count), sum(pr.price*od.count) from products pr

left join order_details od

on pr.id = od.product_id 

group by pr.name, pr.price  

having sum(pr.price * od.count) is not null

order by sum(od.count) desc

limit 5 ;




댓글