[SQL] 제로베이스 - 데이터 조회와 필터링 실습문제 1, 2 풀이
제로베이스 SQL 완주반 실습문제 풀이 노트
활용 데이터셋 : dvdrental (sql sample data)
Q1. Payment 테이블에서 단일 거래의 amount의 액수가 가장 많은 고객들의 customer_id를 추출하라.
단, customer_id의 값은 유일해야 한다.
🧨 1차 시도
select
amount
from
payment
order by
amount desc
;
select
customer_id
from
payment
where
amount = '11.99'
- 서브쿼리 개념에 대해 진도가 나가지 않은 상태라, 처음에는 이렇게 분리해서 풀었다.
원하는 값이 나오기는 했지만, 더 간결하게 풀 수 있는 방법이 없을까?
🧨 2차 시도
select
customer_id
from
payment
where
amount
in (select
amount
from
payment
order by
amount desc
limit 1)
;
- 이번에는 서브쿼리를 활용했다.
처음에는 서브쿼리의 select 값에 넣어야 할 알맞은 column을 못 찾아서 값이 안 나왔는데 적절하게 고쳐 보았다.
order by~desc로 max값을 구하고 limit 1으로 최댓값 하나 산출하기!
🎉 인스트럭터의 모범 풀이 & 📖 문제 풀이 순서 분석하기
select --- (2). payment 테이블에서 가장 큰
distinct A.customer_id amount를 가진 customer_id를 구하고
from 중복을 제거한다.
payment A
where
A.amount = (select --- (1). 우선, 전체 거래 중 amount의
K. amount 액수가 가장 큰 amount를 구한다.
from
payment K
order by
k.amount desc
limit 1)
;
- 앨리어스 처리 해준 후 서브쿼리를 사용했다.
뜯어 보면 내가 풀이한 것과 같은데, 주목할 부분은 가독성을 위한 앨리어스 처리.
Q2. 고객들에게 단체 이메일을 전송하고자 한다. Customer 테이블에서 고객의 email 주소를 추출하고, 이메일 형식에 맞지 않는 이메일 주소는 제외시켜라.
(이메일 형식은 '@'가 존재해야 하고, '@'로 시작하지 말아야 하고, '@'로 끝나지 말아야 한다.)
🧨 1차 시도와 correction
select
email
from
customer c
where
email like '%@%'
and
email not like '@%'
and
email not like '%@'
;
- 이 문제는 황당하게 틀렸다. 바로 where~like절 사이에 column명을 안 넣어줬기 떄문... 모든 걸 다 잘했는데! 이렇게 황당한 실수를 줄여나가기 위해서는 역시 쿼리를 많이 작성해보는 수 밖에 없는 것 같다.
Author And Source
이 문제에 관하여([SQL] 제로베이스 - 데이터 조회와 필터링 실습문제 1, 2 풀이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nonfictionlife/SQL-제로베이스-데이터-조회와-필터링-실습문제-1-2-풀이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)