Tags
- drf
- Article & User
- 큐
- Django
- DB
- 완전검색
- N:1
- 뷰
- outer join
- 스택
- 백트래킹
- distinct
- ORM
- migrations
- 트리
- regexp
- count
- 그리디
- Queue
- stack
- delete
- 쟝고
- 통계학
- Tree
- update
- M:N
- 이진트리
- Vue
- SQL
- create
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Notice
Recent Posts
Link
데이터 분석 기술 블로그
WITH 절 본문
WITH 절이란?
"WITH"는 SQL에서 서브쿼리를 정의하고 재사용할 수 있도록 해주는 기능으로, 공통 테이블 표현식 (Common Table Expression, CTE)이라고 합니다. 이를 통해 쿼리를 더 읽기 쉽고, 재사용 가능하게 작성할 수 있습니다.
WITH 구문
WITH cte_name AS (
SELECT column1, column2
FROM table_name
WHERE condition
)
SELECT *
FROM cte_name;
- WITH: 공통 테이블 표현식을 정의.
- cte_name: 공통 테이블 표현식의 이름.
- AS: 뒤에 오는 서브쿼리를 공통 테이블 표현식으로 정의.
WITH 특징
- 가독성 향상:
- 복잡한 쿼리를 여러 단계로 나누어 이해하기 쉽게 작성할 수 있음.
- 재사용 가능:
- CTE는 하나의 쿼리 내에서 여러 번 사용할 수 있음.
- 임시적 테이블:
- CTE는 쿼리가 실행되는 동안만 존재하는 임시 테이블로 동작.
- 재귀적 쿼리 지원:
- CTE는 자기 자신을 참조하는 재귀적 쿼리를 작성할 수 있음.
예제
문제: 제품별로 총 매출액(quantity * price)을 계산한 다음, 총매출액이 1000 이상인 제품만 선택.
WITH SalesRevenue AS (
SELECT
product,
quantity * price AS total_revenue
FROM Sales
)
SELECT *
FROM SalesRevenue
WHERE total_revenue >= 1000;
문제: 주문이 있는 고객만 선택하고, 고객 이름과 총 주문 금액을 출력.
WITH FilteredOrders AS (
SELECT
customer_id,
SUM(total_amount) AS total_spent
FROM Orders
GROUP BY customer_id
),
FilteredCustomers AS (
SELECT
c.customer_id,
c.name,
o.total_spent
FROM Customers c
JOIN FilteredOrders o
ON c.customer_id = o.customer_id
)
SELECT *
FROM FilteredCustomers;