MySQL 테이블 결합하는 join을 활용한 실습 문제 (left join, right join ...)

2023. 12. 26. 13:16Database/MySQL

728x90
반응형

 

728x90

 

 

 

 

 

join을 활용한 다양한 실습문제를 통해 원하는 데이터를 결합, 추출할 수 있도록 연습합니다.

 

 

 


실습문제

 

 

1. 각 고객별로 주문 수를 나타내시오. 고객의 이름과 이메일이 함께 나와야 합니다.
주문한 내용을 기반으로 주문한 내용만 나오게 한 방법

 

select c.first_name, c.last_name, c.email, count(o.customer_id) as order_cnt
from orders o
join customers c
on c.id = o.customer_id
group by o.customer_id;

 

 

 

 

 

2. 모든 회원정보를 다 나타내고 주문 안한 사람은 주문횟수가 0으로 나타나도록 하고 싶을 때

 

select c.first_name, c.last_name, c.email, count(o.customer_id) as order_cnt
from orders o
right join customers c
on c.id = o.customer_id
group by o.customer_id;

 

 

 

 

 

 

3. 각 고객별로 주문 금액 평균이 300달러 이상인 데이터만 가져오시오

(사람의 이메일과 이름이 함께 나와야 함)

 

select c.first_name, c.last_name, c.email, avg(o.amount) as avg
from orders o
join customers c
on o.customer_id = c.id
group by o.customer_id
having avg >= 300;

 

 

 

 

 

 

4. 각 고객별로 주문 금액의 최대값을 구하고 이 값이 600달러 이상인 데이터만 가져와서 내림차순으로 정렬하시오

이름과 이메일 주소도 함께 나와야 합니다.

 

select o.*, c.first_name, c.last_name, c.email, max(o.amount) as max_amount
from orders o
join customers c
on c.id = o.customer_id
group by o.customer_id
having max_amount >= 600
order by max_amount desc;

 

 

 

 

 

 

5. order 테이블의 주문날짜의 최소값과 최대값을 구하세요

 

select max(o.order_date) min_date, min(o.order_date) max_date
from orders o;

 

 

 

 

 

6. 2019년 12월 20일부터 2020년 1월 10일 사이에 주문한 사람은 몇명입니까?

 

select count(distinct customer_id)
from orders o
where order_date >= '2019-12-20' and order_date <= '2020-01-10';

 

select count(distinct customer_id)
from orders o
where order_date between '2019-12-20' and '2020-01-10';

 

 

 

 

 

7. 2019년 12월 20일 부터 2020년 1월 10일 사이의 주문 데이터에서 고객별 주문금액 평균이 300달러 이상인 사람의 이름과 평균금액을 가져오시오

 

select c.first_name, c.last_name, avg(o.amount) as avg
from orders o
join customers c
on o.customer_id = c.id
where o.order_date between '2019-12-20' and '2020-01-10'
group by o.customer_id
having avg >= 300
order by avg desc;

 

 

 

 

 

반응형

 

728x90
반응형