[수업 목표]
1. Subquery(서브쿼리)의 사용 방법을 배워본다
2. 실전에서 유용한 SQL 문법을 더 배워본다
3. SQL을 사용하여 실전과 같은 데이터분석을 진행해본다
Subquery
:쿼리 안의 쿼리라는 의미
Ex)
SELECT user_id ,name ,email FROM users u
WHERE user_id in (
select user_id from orders o
WHERE payment_method = "kakaopay"
)
//카카오 페이로 결제한 유저 아이디만 보여준다.
//큰 쿼리문 안에 들어가는 쿼리문을 Subquery라고 부른다.
//일단 결과를 만들고 점점 밖에 있는 것들을 실행해나가는 것
// Subquery들을 활용하면 엑셀로는 하기 어려운 복잡한 것들을 처리할 수 있다는 장점이 있음
//Where 필드명 in subquery
//우리가 이미 뽑아놓은 user_id 안에 전체 큰 쿼리에서 user_id가 있느냐
//그럴 때 Where절 안에다 Subquery를 사용한다.
//user_id가 괄호 안에 있으면 걔도 추출해라. 라는 뜻
SELECT c.checkin_id,
c.user_id,
c.likes,
(
SELECT AVG(likes) FROM checkins c
WHERE user_id = c.user_id
) as avg_likes_user
FROM checkins c
// Select에 들어가는 Subquery
//select 필드명, 필드명, (subquery) from
// From에 들어가는 subquery
// 가장 많이 사용함
SELECT pu.user_id, pu.point, a.avg_likes FROM point_users pu
Inner join (
SELECT c.user_id, ROUND(AVG(likes),2) as avg_likes FROM checkins c
group by user_id
) a on pu.user_id = a.user_id
//포인트와 평균적으로 자기가 받은 좋아요의 상관관계를 알 수 있음.
//쪼개서 생각하면 좋음.
[퀴즈 1] 전체 유저의 포인트의 평균보다 큰 유저들의 데이터 추출하기
SELECT * FROM point_users pu
WHERE point > (
SELECT AVG(point) FROM point_users pu
)
먼저 전체 유저의 포인트 평균을 구하고 ( Subquery로 사용)
큰 쿼리문 안에 넣어준다.
[퀴즈 2] 이씨 성을 가진 유저의 포인트의 평균보다 큰 유저들의 데이터 추출하기
SELECT * FROM point_users pu
WHERE point > (
)
큰 쿼리문 만들고
SELECT AVG(point) FROM point_users pu
inner join users u on pu.user_id = u.user_id
WHERE name = "이**"
이씨 성을 가진 유저의 포인트의 평균을 구해준다.
SELECT * FROM point_users pu
WHERE point > (
SELECT AVG(point) FROM point_users pu
inner join users u on pu.user_id = u.user_id
WHERE name = "이**"
)
집어 넣으면 끝!
※늘 들여쓰기로 줄 맞춰주기
[퀴즈 3] checkins 테이블에 course_id별 평균 likes수 필드 우측에 붙여보기
SELECT c.checkin_id,
c.course_id,
c.user_id,
c.likes,
(
SELECT AVG(likes) FROM checkins
WHERE course_id = c.course_id
) as course_avg
from checkins c
'개발 일지 > SQL' 카테고리의 다른 글
[개발 일지] 엑셀 보다 쉬운, SQL _ 3주차 (0) | 2023.06.02 |
---|---|
[개발 일지] 엑셀 보다 쉬운, SQL _ 2주차 (0) | 2023.05.22 |
[개발 일지] 엑셀 보다 쉬운, SQL _ 1주차 (0) | 2023.05.19 |