반갑습니다
저번 포스트에 이어서 실습예제 7-2입니다
이번 문제에서는 샘플 데이터로
customers 테이블과 orders 테이블을 사용합니다 ^^
하단에 파일 첨부합니다
customers 테이블의 스키마 구조와 데이터 정보입니다 ^^
orders 테이블의 스키마 구조와 데이터 정보입니다 ^^
예제6.
first_name에 문자열 'ty'가 포함되어 있
회원의 주문내역을 조회하시오.
SELECT * FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
WHERE c.first_name LIKE '%ty%';
WHERE 구에 LIKE 키워드와 메타문자를 사용하여
특정 문자가 포함된 문자열을 갖는 레코드를 모두 조회해주시면 되겠습니다 ^^
예제7.
amount 값이 300이상이고 500이하인 주문내역에
해당 주문자의 이메일 정보를 추가하여 조회하시오.
SELECT o.*, c.email
FROM orders o
JOIN customers c ON o.customer_id = c.id
WHERE amount BETWEEN 300 AND 500;
WHERE 조건식 지정시 특정 조건이 만약 일정 값 범위 내부를 가리킨다면
두 개의 조건식(amount > 300, amount < 500)을 AND로 연결하는 것보다
BETWEEN 키워드를 이용하는 것이 더 효율적입니다 ^^
예제8.
각 고객별 주문 수를 조회하되, 고객의 이름과 이메일 정보를 포함하시오.
SELECT c.first_name, c.last_name, email, COUNT(o.id)
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY email;
이번에도 마찬가지로 그냥 JOIN 연산이 아니라, LEFT JOIN 연산을 적용했는데요
고객 정보는 존재하지만 해당 고객이 한 번도 주문을 한 적이 없을 수 있기 때문입니다 ^^
예제9.
각 고객별로 주문 금액 평균이 300 달러 이상인 데이터를 조회하되
이메일, 이름, 평균금액까지 포함하시오.
SELECT c.email, c.first_name, c.last_name, AVG(amount) AS avg_amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY email
HAVING AVG(amount)>300;
이번에는 HAVING 키워드를 적용하여,
그룹화 이후에 특정 조건을 만족하는 데이터만 조회하도록 하였습니다 ^^
SQL문의 내부 처리 순서가 다음과 같았죠 ^^?
WHERE → GROUP BY → HAVING → SELECT → ORDER BY
때문에 그룹화 이후에 조건을 적용시키려면
WHERE가 아니라 HAVING을 사용해야 했습니다 ^^!
예제10.
각 고객별로 주문 금액의 최대값을 구하고
이 값이 600 이상인 데이터만 내림차순으로 조회하시오.
SELECT c.id, c.first_name, c.last_name, c.email, max(o.amount) as max_amount
FROM customers c
LEFT JOIN orders o ON c.id = o.customer_id
GROUP BY email
HAVING max(o.amount)>600
ORDER BY max(amount) DESC;
일단 customers 테이블과 orders 테이블을 JOIN 연산으로 합치되,
고객 정보만 있고 주문은 한 건도 안 했을 수도 있으므로 LEFT JOIN 연산을 수행해줍니다 ^^
그리고 GROUP BY 키워드를 이용해 email을 기준으로 묶어주고
각 고객별로 주문금액의 최대치가 몇인지 max() 함수를 이용해 집계를 해줍니다 ^^
그리고 문제의 조건과 같이 HAVING 키워드를 이용해
최대 주문금액이 600 이상인 사용자만 조건 조회하여
최대 주문금액을 기준으로 내림차순 정렬을 해주면 되겠습니다 ^^!
이제 3문제만 남았는데요
다음 포스트에서 마저 풀고 실습예제 7을 마무리하도록 하겠습니다 ^^!
'MySQL > 실습문제' 카테고리의 다른 글
[EXERCISES] 18. 실습예제(7-3) (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 |