inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

데이터 분석 SQL Fundamentals

순위 함수 cume_dist, percent_rank, ntile 실습

상품 매출 순위 10% 상품 및 매출액 질문

294

April Kang

작성한 질문수 5

0

안녕하세요.
마지막 문제 풀 때 아래와 같은 쿼리로 해도 같은 결과가 나오는데
아래와 같이 with절을 써도 될까요?
인라인 서브쿼리를 사용하는 경우와 with절을 사용하는 경우가 있는데 이 둘의 차이를 알려주시면 감사드리겠습니다!
 
with temp_01 as
(
select product_id, sum(amount) as sum_amount
from order_items
group by product_id
order by 1 ), temp_02 as(
select a.product_id, a.sum_amount, b.product_name
, cume_dist()over(order by sum_amount asc) as cume_amount
from temp_01 a
join products b on a.product_id = b.product_id
)
select *
from temp_02 where cume_amount >= 0.9

sql DBMS/RDBMS postgresql

답변 1

2

권 철민

안녕하십니까, 

네, 물론입니다. 인라인 서브쿼리 대신 with 절을 사용하셔도 무방합니다. 

인라인 서브쿼리와 with절은 거의 동일합니다. 다만 with절은 인라인 서브쿼리의 약간(?)의 문제점을 대체하기 위해서 나온것인데, With 절의 집합을 SQL 전체에서 사용할 때는 해당 집합을 얼마든지 With 절에 as로 명시된 집합명으로 사용할 수 있는데 반해서 인라인 서브쿼리는 그렇지 못하다는 차이가 있습니다. 

가령 with 절의 집합을  self 조인하면 아래와 같이 with 절의 as 집합명을 이용하여 쉽게 가능하지만  

with 

temp_01 as ( 

select product_id, sum(amount) as sum_amount

from nw.orders a 

join nw.order_items b 

on a.order_id = b.order_id

group by product_id

)

select * from temp_01 a, temp_01 b 

where a.product_id = b.product_id;

 

인라인 서브쿼리의 경우는 해당 집합을 아래와 같이 중복해서 명시해 줘야 합니다. 

select * from 

(select product_id, sum(amount) as sum_amount

from nw.orders a 

join nw.order_items b 

on a.order_id = b.order_id

group by product_id

) a, 

(select product_id, sum(amount) as sum_amount

from nw.orders a 

join nw.order_items b 

on a.order_id = b.order_id

group by product_id 

) b

where a.product_id = b.product_id;

0

April Kang

두 질문 모두 이해했습니다! 친절하게 설명해주셔서 감사드립니다! :)

최신버젼 다운로드

0

51

2

'레벨 유지'의 의미에 대한 질문

0

68

2

date_part

0

70

2

lag/lead offset 관련 질문

0

75

2

join 관련 질문 (inner join, left join)

1

114

2

배치에서 full outer join을 쓴다고 하셨는데 예시를 알 수 있을까요?

0

105

2

Madrid에 살고 있는 고객이 주문한 주문 정보를 구할것. 실습 질문드립니다

0

65

2

rollup시 null값 매출 라벨링

0

69

2

10. 조인 실습 - 02 관련 질문

0

72

1

조인실습03 - join의 pk-fk join

0

120

2

조인실습03 - join의 pk-fk join

0

81

2

(공유)맥, 스키마 import

0

85

2

sql 입문자인데, 이 강의와 sql 코딩테스트와 연관이 있을까요?

0

147

2

1인지 M인지는 결국엔 테이블을 직접 확인을 해야 하는걸까요?

0

141

2

안녕하세요. 튜닝핵심가이드강의 관련해서 여쭤보고 싶어서 남깁니다.

0

98

1

섹션5 Group by 실습-01 강의 예제 질문

0

130

2

섹션2 조인 기반 메커니즘에서 조인 실습 - 04 강의 예제 질문

0

134

2

섹션2 조인 실습 01 강의 질문

0

141

2

lead lag 이해 강의에서 윈도우 절은 사용되지 않습니다.

0

137

1

Dbeaver오류

0

649

2

직원 별 가장 높은 매출

0

125

1

강의순서대로 실습코드순알려주세요.

0

144

1

m:n inner join일 경우 cross조인과 동일하게 동작되는건가요?

0

143

1

rollup

0

94

2