SQL 쿼리가 작동하지 않습니다.SQL Puzzle -이 두 개의 하위 쿼리를 결합 할 수없는 이유는 무엇입니까?
Table DG_GAME_ROUNDS
RoundId int
GameId int
RoundNumber int
Value varchar(20)
Guess varchar(20)
Answer varchar(20)
Correct bit
Minutes int
Seconds int
Milliseconds int
이 표는 게임 라운드의 결과를 원하는 분야
은 다음 표를 생각해 보자. 이제는 게임에 대한 해답을 간과 할 수 있고, 추측 시간이 35 밀리 초 또는 심지어 0 밀리 초가 될 수도 있습니다. 이 답변은 내 게임 결과를 왜곡하고 제거하려고합니다.추측이 최소 200 밀리 초가되는 평균 추측 시간을 알아 내고 싶습니다. 그래서 게임에 455, 400, 340, 30, 300의 추측을 가진 5 라운드가 있다면 30을 무시하고 나머지 4 개의 값을 평균하여 374의 평균 추측 시간을 얻고 싶습니다. 평균 추측 시간 30을 버리지 않고 305.
내 문제는 두 하위 쿼리를 조인하려고하는데 "on"문 주위에 문제가 있다는 오류 메시지가 나타납니다. 하위 쿼리 조인은 허용됩니다.
select vt.gameid, vt.totalms, vt.numofguesses, vt.correctguesses
from
(select gr.gameid
, sum((gr.seconds*1000) + gr.milliseconds) as totalms
, count(gr.roundid) as numofguesses
, sum(cast(gr.correct as int)) as correctguesses
from work_tables.dbo.dg_game_rounds gr (nolock)
group by gr.gameid
) vt
inner join (
select vtIII.gameid, vtIII.avgtime
from
(
select vtII.gameid, sum(vtII.avgms)/count(vtII.avgms) as avgtime
from (
select gr.gameid, gr.seconds * 1000 + gr.milliseconds as avgms
from dg_game_rounds gr (nolock)
where gr.seconds * 1000 + gr.milliseconds > 200
) vtII
group by vtII.gameid
) vtIII
on vtIII.gameid = vt.gameid
T-SQL 코드를 읽기/쓰기/유지하기가 더 쉽도록보기를 만드는 것을 고려 했습니까? 이 쿼리가 많이 호출되면 인덱싱 된 뷰는 vt라고 부른 하위 쿼리에도 의미가있을 수 있습니다. –
이런 질문이 나오면 가까운 장래에 다른 사람을 도울 수 없다는 보장이 거의 확실합니다. 이것은 앞으로의 사용을 위해 너무 지역화되어 있습니다. – JNK