Avatar billede Slettet bruger
16. november 2015 - 20:43 Der er 6 kommentarer

TOP returnerer forkert antal rækker

Hej alle,

Jeg har en query, som bruges til at hente top 3 resultater for hvert team i en cup.

Mit problem er at forespørgslen i enkelte tilfælde kun summerer 2 resultater hvor 3 eksisterer i databasen.

Kan en af jer skarpe hjerner forklare hvad jeg gør forkert i denne forbindelse?

Jeg har på fornemmelsen at der er noget jeg ikke har forstået i brugen af TOP.

Query'en kan ses her:
http://pastie.org/10561177

Hilsen Rasmus
Avatar billede Slettet bruger
17. november 2015 - 09:02 #1
TOP(3) giver dig 3 rækker - hvis der er 3 eller flere.
Så dit sub-select giver dig ikke altid 3 rækker.
Avatar billede Slettet bruger
17. november 2015 - 09:22 #2
Her er et forsøg på at løse dit problem på en anden måde:

SELECT MIN(TeamType) as TeamType, MIN(CupId) as CupId, MIN(TeamId) as TeamId, MIN(EventTypeLinkId) as EventTypeLinkId, MIN(S1.Id) as Id, SUM(Point) as Point, SUM(OverallPoint) as OverallPoint
from (
SELECT s1.*, row_nuber() over(partition by s1.TeamId order by s1.Point desc) Nr
FROM EventParticipatingTeams S1, EventTypeLinks
WHERE S1.EventTypeLinkId = EventTypeLinks.Id
AND CupId = @cupID
AND EventTypeLinks.EventTypeId = @eventTypeId
AND TeamType = @teamType
AND Point > 0
) x
where Nr <= 3
GROUP BY S1.TeamId
ORDER BY Point DESC
Avatar billede terry Ekspert
17. november 2015 - 09:32 #3
I always believed that TOP X would return X or more rows but after looking around on google that doesn't seem to be the case.

If there are ties in the result then you have to use WITH TIES to show these.

http://blog.sqlauthority.com/2009/12/23/sql-server-order-by-clause-and-top-with-ties/
Avatar billede terry Ekspert
17. november 2015 - 09:33 #4
SO a simple SELECT TOP X ORDER BY should give X in the result
Avatar billede Slettet bruger
17. november 2015 - 13:33 #5
select top 3 udenom vil måske også virke? Ellers er jeg enig med de 2 andre :)
Avatar billede kjulius Novice
01. januar 2016 - 21:16 #6
Måske kunne OP komme med nogle eksempel data fra tabellerne, som kunne illustrere problemet? Helst med tilhørende tabelopbygning mv.

Jeg synes umiddelbart, at forespørgslen ser unødvendigt kompliceret ud til det jeg tror den skal lave. Men selv det er jeg i tvivl om, hvad er... :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester