Chef.Yeon
Code Cook
Chef.Yeon
전체 방문자
오늘
어제
  • 분류 전체보기 (230)
    • 게임 개발 (1)
      • Unity (1)
    • Android (27)
      • Kotlin (19)
      • 우아한테크코스 5기 (4)
    • Language (11)
      • 파이썬 (3)
      • Java (7)
    • DB (2)
      • SQL (16)
    • Spring (25)
    • 코딩테스트 (56)
    • Git (1)
    • TIL (85)
    • DevOps (6)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 코틀린
  • 에라토스테네스의 체
  • MariaDB
  • kotlin
  • Docker
  • 파이썬
  • 프리코스
  • rsocket
  • 다이나믹 프로그래밍
  • Android
  • 코틀린 인 액션
  • enum
  • Wil
  • ec2
  • grafana
  • java
  • 프로그래머스
  • 안드로이드
  • 레포지토리
  • 백준
  • SQL
  • elasticsearch
  • 내림차순
  • kibana
  • spring
  • webflux
  • 문자열
  • 코딩테스트
  • 우아한테크코스
  • til

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Chef.Yeon

Code Cook

DB/SQL

[DB/SQL] With절을 사용하여 임시 테이블 생성하기

2023. 3. 21. 19:27

다음과 같이 쿼리문이 있을 때, SubQuery가 많아 복잡해보입니다. 여기서 계속 SubQuery가 붙으면 알아보기에도 어려울 것입니다.

select c.title, b.cnt_checkins, a.cnt_total, (b.cnt_checkins/a.cnt_total) as ratio from
(
	select course_id, count(*) as cnt_total from orders
	group by course_id
) a
inner join (
	select course_id, count(distinct(user_id)) as cnt_checkins from checkins
	group by course_id
) b on a.course_id = b.course_id
inner join courses c on a.course_id = c.course_id

 SubQuery를 따로 테이블로 만들어 두고, 테이블명만으로 join을 하면 더욱 깔끔하지 않을까요?

이런 경우, With를 사용할 수 있습니다.

 

With는 가장 상단에 정의해주어야 합니다.

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

이전보다 정리된 모습을 볼 수 있습니다.

728x90

'DB > SQL' 카테고리의 다른 글

[DB/SQL] CASE, WHEN, THEN, ELSE 사용하기  (0) 2023.03.21
[SQL] SUBSTRING_INDEX, SUBSTRING 문자열 데이터 다루기  (0) 2023.03.21
[DB/SQL] SubQuery - Select, Where, From절에서 사용하기  (0) 2023.03.21
[DB/SQL] UNION, UNION ALL 쿼리 결과 합치기  (0) 2023.03.21
[DB/SQL] 테이블 Join, Inner Join과 Left Join이란? 예시를 통해 알아보자  (0) 2023.03.21
    'DB/SQL' 카테고리의 다른 글
    • [DB/SQL] CASE, WHEN, THEN, ELSE 사용하기
    • [SQL] SUBSTRING_INDEX, SUBSTRING 문자열 데이터 다루기
    • [DB/SQL] SubQuery - Select, Where, From절에서 사용하기
    • [DB/SQL] UNION, UNION ALL 쿼리 결과 합치기
    Chef.Yeon
    Chef.Yeon
    보기 좋고 깔끔한 코드를 요리하기 위해 노력하고 있습니다.

    티스토리툴바