SQL难题-为什么可以';我不能加入这两个子查询吗?
我被SQL查询卡住了 考虑下表:SQL难题-为什么可以';我不能加入这两个子查询吗?,sql,sql-server,sql-server-2005,Sql,Sql Server,Sql Server 2005,我被SQL查询卡住了 考虑下表: 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毫秒的猜测时间结束。这些答
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毫秒长。因此,如果一场游戏有五轮,猜度为4554034030300。我想忽略30,平均剩下的四个值,得到平均猜测时间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
因为你错过了一个结尾)(从第二行到最后一行)
您尚未关闭所有子查询:
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 ) f
on f.gameid = vt.gameid
我加了这个:
)vtIII)f
数一数你的括号
inner join (
从不关闭。您是否考虑过创建视图以使T-SQL代码更易于阅读/编写/维护?如果这个查询被多次调用,索引视图甚至可能对您调用vt的子查询有意义。投票结束,因为这样的问题几乎可以保证将来不会帮助任何其他人。这太本地化了,无法在将来使用。
inner join (