4회차_Subquery 총정리

소라·2023년 8월 18일
0

SQLD고군분투기

목록 보기
4/4

원하는 데이터를 더 쉽게: Subquery

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

자주 사용하는 subquery 유형 알아보기

  1. where에 들어가는 서브쿼리
    where은 조건문이다.
where 필드명 in (subquery) 이렇게 들어간다.

2.select에 들어가는 서브쿼리
select는 결과를 출력해주는 것이다. 기존 테이블에 함께 보고싶은 통계데이터를 손쉽게 붙이는 것에 사용한다.

select 필드명, 필드명, (subquery)from
  1. from에 들어가는 서브쿼리
    내가 만든 select와 이미 있는 테이블을 join하고 싶을때 사용한다.
    유저 별 좋아요 평균을 구하고, 해당 유저별 포인트를 보고 싶다면?
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

먼저 서브쿼리의 select가 실행되고, 이것을 테이블처럼 여기고 밖의 select가 실행!

Distinct 뜻

중복없이 세는것을 뜻한다.

COUNT(distinct(user_id))

user_id를 중복없이 센다는 의미

with절

서브쿼리를 tabel1로 지정하여 간단하게 보여줄 수 있다.

with table1 as (
	select course_id, count(distinct(user_id)) as cnt_checkins from checkins
	group by course_id
), table2 as (
	select course_id, count(*) as cnt_total from orders
	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문법

1. SUBSTRING_INDEX

  • 이메일에서 아이디만 가져와보기
    select user_id, email, SUBSTRING_INDEX(email, '@', 1) from users
    ``

👉 @를 기준으로 텍스트를 쪼개고, 그 중 첫 번째 조각을 가져오라는 뜻!

  • 이메일에서 이메일 도메인만 가져와보기

    select user_id, email, SUBSTRING_INDEX(email, '@', -1) from users

    👉 @를 기준으로 텍스트를 쪼개고, 그 중 마지막 조각을 가져오라는 뜻!

2. substring

문자열 일부만 출력하기

  • orders 테이블에서 날짜까지 출력하게 해보기
    select order_no, created_at, substring(created_at,1,10) as date from orders
    • SUBSTRING(문자열, 출력을 하고싶은 첫 글자의 위치, 몇개의 글자를 출력하고 싶은지)

3. case

👉 10000점보다 높은 포인트를 가지고 있으면 '잘 하고 있어요!', 평균보다 낮으면 '조금 더 달려주세요!' 라고 표시해라.
  • 포인트 보유액에 따라 다르게 표시해주기
select pu.point_user_id, pu.point,
case 
when pu.point > 10000 then '잘 하고 있어요!'
else '조금 더 달려주세요!'
END as '구분'
from point_users pu;

복습

화이팅이 포함된 다짐을 쓴 유저 찾기
like쓰기

where comment like '%화이팅%'

화이팅 앞뒤는 뭐가 와도 상관 없기에 %붙이기

1개의 댓글

comment-user-thumbnail
2023년 8월 18일

좋은 글이네요. 공유해주셔서 감사합니다.

답글 달기