2
FROM 절의 Sub Query에 유효한 유스 케이스는 무엇입니까? 그 계획은 어떻게 작동합니까? 이렇게 많은 타입의 예가 있습니다. 그 중 하나에 대한 링크는 here이지만이 구성표가 어떻게 작동하는지 알 수 없습니다.from 절의 하위 쿼리는 어떻게 작동합니까?
P .: 답변이 오라클 관련이면 괜찮습니다.
FROM 절의 Sub Query에 유효한 유스 케이스는 무엇입니까? 그 계획은 어떻게 작동합니까? 이렇게 많은 타입의 예가 있습니다. 그 중 하나에 대한 링크는 here이지만이 구성표가 어떻게 작동하는지 알 수 없습니다.from 절의 하위 쿼리는 어떻게 작동합니까?
P .: 답변이 오라클 관련이면 괜찮습니다.
다음은 from 절의 하위 쿼리에 대한 몇 가지 사용 사례입니다. 그것이 작동하는 방법은 귀하의 질문에 대한 설명에 설명되어 있습니다 (SQL은 관계 연산자 덕택에 수학적으로 닫힙니다).
1. 피벗 (SQL 서버 2008)
select P.RUN_ID
, [2012] = sum(P.[2012])
, [2013] = sum(P.[2013])
, [2014] = sum(P.[2014])
, [2015] = sum(P.[2015])
from (select T.RUN_ID
, Y.YEAR
, T.MEASURE
from SOME_TABLE T
inner join
YEAR Y
on T.SOME_ID = Y.SOME_ID
) T
pivot (
sum(MEASURE)
for YEAR in ([2012], [2013], [2014], [2015])
) P
group by
P.RUN_ID
order by
P.RUN_ID
절 이상
2 (오라클) 노동 조합
select S.Text_ID
, row_number() over (partition by S.Text_ID order by S.Segmentstart) as Segmentnumber
, S.Segment_ID
, S.Segmentstart
, S.Segmentend
, S.Segmentfragment
from (select S.Text_ID as Text_ID
, S.Satz_ID as Segment_ID
, S.Start as Segmentstart
, S.End as Segmentend
, S.Fragment as Segmentfragment
from Mainclauses S
union all
select X.ID as Text_ID
, null as Segment_ID
, coalesce(S.End, 0) as Segmentstart
, lead(S.Start, 1, X.CONTENT_LENGTH) over (partition by X.ID order by S.Start) as Segmentend
, 'X' as Segmentfragment
from Texts X
left join
Mainclauses S
on X.ID = S.Text_ID
union all
select X.ID as Text_ID
, null as Segment_ID
, 0 as Segmentstart
, min(S.Start) as Segmentend
, 'X' as Segmentfragment
from Texts X
inner join
Mainclauses S
on X.ID = S.Text_ID
group by
X.ID
) S
3 절 이상 (SQL 서버 2008을 기반으로) 합계와 합계
select E.X_ID
, Z.SomeThing
, sum(Z.OtherMeasure * E.Measure) as CombinedMeasure
, Sorting = row_number() over
(partition by
E.X_ID
order by
Z.SomeThing
)
from (select E.X_ID
, E.Y_ID
, Measure = sum(E.Measure)
from SomeTable E
group by
E.X_ID
, E.Y_ID
) E
inner join
OtherTable Z
on E.Y_ID = Z.Y_ID
4. 계산 비율 (SQL 서버 2008) 두 개 이상의 테이블 (SQL 서버 2008)
select *
from (select A, M = sum(M) from S group by A) X
full outer join
(select A, M = sum(M) from T group by A) Y
on X.A = Y.A
where A.X is null
or B.X is null
or abs(A.M - B.M) > 0.00000001
주
with SomeData
(Main_ID
, Sub_ID
, Measure
)
as (select Main_ID
, Sub_ID
, Measure = sum(Measure)
from SomeTable P
group by
Main_ID
, Sub_ID
)
select Main_ID
, Sub_ID
, Ratio = D.Measure/sum(M.Measure) over (partition by M.Main_ID)
from SomeData D
inner join
(select Main_ID
, Measure = sum(Measure)
from SomeData
group by
Main_ID
having sum(Measure) != 0
) M
on M.Main_ID = D.Main_ID
5. 부분을 비교 한 :이 있습니다 예제에서와 나는 from 절의 하위 쿼리가 결과를 얻는 좋은 해결책이라고 생각했습니다.
"super query"에서 하위 쿼리를 집계하고 창 함수 또는 'over' 절을 사용할 수 있습니다. – Claude
흠. 가장 일반적인 유형의 하위 쿼리가 아닙니까? 어떻게 작동하는지에 관해서는 하위 쿼리가 반환하는 것과 똑같은 데이터를 포함하는 테이블의 쿼리라고 생각할 수 있습니다. 쿼리가 수퍼 쿼리 열에 종속되어 있지 않으면 이해하기가 더 복잡해집니다. 질문에서 좀 더 구체적인 질문을 할 수 있습니까? 어떤 부분이 혼란 스럽습니까? 어쩌면 예제 쿼리를 게시 할 수 있습니다. – Thilo
@Michael은 답을 제시해 주실 수 있습니다. – Geek