Je suis bloqué sur une requête SQL.SQL Puzzle - Pourquoi je ne peux pas joindre ces deux sous-requêtes?
Tenir compte le tableau suivant:
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
Ce tableau contient les résultats des tours de jeu. Maintenant, parfois, vous pouvez grimper une réponse au jeu et se retrouver avec un temps de conjecture de 35 ou même 0 millisecondes. Ces réponses faussent les résultats de mon jeu et je veux les enlever.
Je veux comprendre le temps moyen approximatif où la supposition est au moins 200 millisecondes de long. Donc, si un jeu a eu cinq tours avec des conjectures de 455, 400, 340, 30, 300. Je veux ignorer les 30 et moyenne sur les quatre valeurs restantes et obtenir un temps de conjecture moyenne de 374. Sans laisser tomber les 30 le temps moyen deviner Mon problème est que j'essaye de joindre deux sous-requêtes et j'obtiens un message d'erreur indiquant qu'il y a un problème autour de l'instruction "on". Je pense que joindre des sous-requêtes est autorisé.
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
Avez-vous envisagé de créer des vues pour rendre votre code T-SQL un peu plus facile à lire/écrire/maintenir? Si cette requête est appelée beaucoup, une vue indexée peut même avoir un sens pour la sous-requête que vous avez appelée vt. –
Voter pour fermer car des questions comme celle-ci sont pratiquement garanties pour ne jamais aider quelqu'un d'autre dans le futur. C'est beaucoup trop localisé pour être utilisé à l'avenir. – JNK