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 ;

댓글
댓글 쓰기