ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [MySQL] 수업 4주차 - Subquery
    데이터 공부하기 2022. 8. 29. 22:47

    [목차]

    1. Subquery(서브쿼리)
    2. 실전 SQL 문법

    Subquery

    - 하나의 SQL 쿼리 안에 또다른 SQL 쿼리가 있는 것을 의미합니다.

     

    예시 1. kakaopay로 결제한 유저들의 정보 보기 (기본)

     

    예시 2. 1. kakaopay로 결제한 유저들의 정보 보기 (서브쿼리 사용)

    이렇게 Tab을 활용해서 쿼리문 안에 쿼리문을 넣는 구조가 서브쿼리다.

    *주의 ( ) 사용을 잘해야지 나중에 위치를 헷갈리지 않는다!

     

    Subquery 활용 Top3

    - where, select, from

     

    1. Where

     

    카카오페이로 결제한 주문건 유저들만, 유저 테이블에서 출력해주고 싶을 때

     

    select * from users u

    where u.user_id in (select o.user_id from orders o

       where o.payment_method = 'kakaopay');

     

    2. Select

     

    '오늘의 다짐' 좋아요의 수가, 본인이 평소에 받았던 좋아요 수에 비해 얼마나 높고 낮은지

     

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

       (select avg(likes) from checkins c2

       where c2.user_id = c.user_id) as avg_like_user

    from checkins c;

     

    3. From (가장 많이 쓰는 유형!), 내가 만든 Select와 이미 있는 테이블을 Join하고 싶을 때 사용

    우선 유저 별 좋아요 평균

    select user_id, round(avg(likes),1) as avg_like from checkins

    group by user_id

     

    여기서 해당 유저 별 포인트

    select pu.user_id, a.avg_like, pu.point from point_users pu

    inner join (

      select user_id, round(avg(likes),1) as avg_like from checkins 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  -> 섭쿼리로 매번 평균을 구하지 않고 실시간으로 변하는 평균을 자동으로 측정해줌

    )

     

    2. 이씨 성을 가진 유저의 포인트의 평균보다 큰 유저들의 데이터 추출

    SELECT * from point_users pu

    where point > (

      select AVG(pu.point) from point_users pu

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

      WHERE name = "이**"

    )

     

     

     

     

     

     

     

Designed by Tistory.