상세 컨텐츠

본문 제목

Subquery, with절 연습

코딩/SQL

by joing_in 2023. 3. 17. 18:02

본문

Where 절에 들어가는 Subquery 연습해보기

 

[연습] 전체 유저의 포인트의 평균보다 큰 유저들의 데이터 추출하기

ex)

SELECT * from point_users pu

where point > (

select avg(point) from point_users pu

)

[연습] 이씨 성을 가진 유저의 포인트의 평균보다 큰 유저들의 데이터 추출하기

ex)

select * from point_user pu

where point > (

SELECT avg(pu.point) from users u

inner join point_users pu on u.user_id = pu.user_id

where u.name = '이**'

)

 

select * from point_users pu

where point > (

select avg(point) from point_users pu

where user_id in (

select user_id from users where name = '이**'

)

)

 

Select 절에 들어가는 Subquery 연습해보기

 

checkins 테이블에 course_id별 평균 likes수 필드 우측에 붙여보기

ex)

select c.checkin_id, c.course_id, c.user_id, c.likes,

(

select avg(likes) from checkins c

where course_id = c.course_id

) as course_avg

from checkins c

 

checkins 테이블에 과목명별 평균 likes수 필드 우측에 붙여보기

ex)

select c.checkin_id, c2.title, c.user_id, c.likes,

(

select round(avg(likes),1) from checkins c

where course_id = c.course_id

) as course_avg

from checkins c

inner join courses c2 on c.course_id = c2.course_id

 

From 절에 들어가는 Subquery 연습해보기

 

course_id별 유저의 체크인 개수를 구해보기!

ex)

select course_id, count(distinct(user_id)) as cnt_checkins from checkins c

group by course_id

 

course_id별 checkin개수에 전체 인원을 붙이기

ex)

select a.course_id, a.cnt_checkins, b.cnt_total from

(

select course_id, count(distinct(user_id)) as cnt_checkins from checkins c

group by course_id

) a

inner JOIN

(

select course_id, count(*) as cnt_total from orders o

group by course_id

) b on a.course_id = b.course_id

 

퍼센트를 나타내기

ex)

select a.course_id, a.cnt_checkins, b.cnt_total, (a.cnt_checkins/b.cnt_total) AS ratio from

(

select course_id, count(distinct(user_id)) as cnt_checkins from checkins c

group by course_id

) a

inner JOIN

(

select course_id, count(*) as cnt_total from orders o

group by course_id

) b on a.course_id = b.course_id

 

강의 제목도 나타나면 좋겠네요!

ex)

select c.title, a.cnt_checkins, b.cnt_total, (a.cnt_checkins/b.cnt_total) as ratio from

(

select course_id, count(distinct(user_id)) as cnt_checkins from checkins c

group by course_id

) a

inner JOIN

(

select course_id, count(*) as cnt_total from orders o

group by course_id

) b on a.course_id = b.course_id

INNER JOIN courses c ON a.course_id = c.course_id

 

with절

ex)

with table1 as(

select course_id, count(distinct(user_id)) as cnt_checkins from checkins c

group by course_id

), table2 as(

select course_id, count(*) as cnt_total from orders o

group by course_id

)

select c.title,

a.cnt_checkins,

b.cnt_total,

(a.cnt_checkins/b.cnt_total) as ratio

from table1 a

inner JOIN table2 b on a.course_id = b.course_id

INNER JOIN courses c ON a.course_id = c.course_id

'코딩 > SQL' 카테고리의 다른 글

SQL 문제  (0) 2023.03.19
SQL 문자열, Case  (0) 2023.03.17
SQL Union, Subquery  (0) 2023.03.17
SQL left join 연습  (0) 2023.03.17
SQL inner join 연습  (0) 2023.03.15

관련글 더보기