본문 바로가기
MySQL/실습문제

[EXERCISES] 18. 실습예제(7-3)

by Fletcher 2024. 8. 10.

 

반갑습니다

저번 포스트에 이어서 실습예제 7-3입니다

 

이번 문제에서는 샘플 데이터로

customers 테이블과 orders 테이블을 사용합니다 ^^

하단에 파일 첨부합니다

customers.sql
0.01MB
orders.sql
0.06MB

 

 

 

 

 

 

 

customers 테이블의 스키마 구조와 데이터 정보입니다 ^^

 

 

 

 

orders 테이블의 스키마 구조와 데이터 정보입니다 ^^

 

 

 

 

 

 

 

예제11.

orders 테이블의 주문날짜의 최소값과 최대값을 조회하시오.

 

 

SELECT MIN(order_date) AS min_date,
MAX(order_date) as max_date
FROM orders;

 

집계 함수 중에 MIN()과 MAX() 함수를 사용하는 간단한 문제입니다 ^^

 

 

 

 

 

예제12.

2019년 12월 20일부터 2020년 1월 11일 사이에 주문한 사람은 몇 명인가?

 

 

SELECT COUNT(DISTINCT customer_id) AS "count"
FROM orders
WHERE order_date BETWEEN '2019-12-20' AND '2020-01-11';

 

WHERE 키워드를 이용해서 조건을 첨부하실 때

해당 날짜의 범위에 맞는 조건식으로 조회해주시면 되겠습니다 ^^

 

 

 

 

 

 

예제13.

2019년 12월 20일부터 2020년 1월 10일 사이의 주문 데이터 중

고객별 주문금액 평균이 300달러 이상인 회원의 이름, 평균금액 조회하시오.

 

 

SELECT c.first_name, c.last_name, AVG(amount) AS avg_amount
FROM orders o
LEFT JOIN customers c ON o.customer_id = c.id
WHERE order_date BETWEEN '2019-12-20' AND '2020-01-11'
GROUP BY c.email
HAVING avg_amount > 300
ORDER BY avg_amount DESC;

 

마지막 13번 문제는 조건이 두 개입니다 ^^

먼저는 해당 기간 내의 주문 정보여야 하고,

해당 주문 정보의 평균 금액이 300 이상이어야 합니다 ^^

 

SQL문의 내부처리 순서상

WHERE → GROUP BY → HAVING → SELECT → ORDER BY의 차례를 갖기 때문에

①WHERE 구를 이용해 해당 조건 내의 주문 정보로 추려야하고

②그룹화 이후 평균 금액이 300 이상인 데이터를 다시 한 번 추려내야 합니다 ^^

 

이번에도 역시 고객 정보만 존재하고 한 번도 주문을 하지 않은 경우가 있을 수 있으니

그냥 JOIN 연산이 아니라 LEFT JOIN 연산을 적용하였습니다 ^^!

 

마지막으로 평균 주문금액을 기준으로 내림차순 정렬을 해주면,

문제에서 요구하는 해당 조건을 만족하는 데이터를 조회할 수 있습니다 ^^!

 

 

 

 

 

이상으로 실습예제 7을 마무리하도록 하겠습니다 ^^!

'MySQL > 실습문제' 카테고리의 다른 글

[EXERCISES] 17. 실습예제(7-2)  (0) 2024.08.10
[EXERCISES] 16. 실습예제(7-1)  (0) 2024.08.10
[EXERCISES] 15. 실습예제(6-4)  (0) 2024.08.10
[EXERCISES] 14. 실습예제(6-3)  (0) 2024.08.10
[EXERCISES] 13. 실습예제(6-2)  (0) 2024.08.08