본문 바로가기

개발 일지/SQL

[개발 일지] 엑셀 보다 쉬운, SQL _ 4주차

[수업 목표]

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