Toon posts:

[MSSQL] Distinct op 1 field in multipe-field select

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Hi all,

Wat ik probeer te doen is een distinct op 1 veld te doen, in een select waarin meerdere velden zitten.

Mijn query:

code:
1
2
3
4
SELECT TOP 25 s.cursist, SUM(s.score) AS punten, s.session_uid FROM web_games_scores AS s
WHERE s.game_uid = 1
GROUP BY s.cursist, s.session_uid
ORDER BY punten DESC


Ofwel: Ik wil de 25 cursisten met de hoogste score. Cursisten kunnen meerdere sessies (waarin ze punten kunnen halen) hebben, en alleen de beste sessie mag meetellen. In dit overzicht wil ik alleen unique cursisten. Als ik echter distinct toevoeg, werkt dat niet, aangezien de punten voor een cursist wel uniek zijn. Wat ik nu bv heb:

Cursist -- Punten
pietje -- 30
pietje -- 25
klaas -- 20

Ik wil dus alleen zien:
pietje -- 30
klaas -- 20


Hoe kan ik dit in mssql oplossen? Ik heb al gepuzzled met subqueries, maar ben er nog niet uitgekomen. In Postgresql kan je volgens mij distinct on( field ) doen, maar mssql neemt dat niet...

Alvast bedankt!

Acties:
  • 0 Henk 'm!

Verwijderd

Een subquery lijkt me ook de makkelijkste oplossing, gewoon het resultaat van wat je al had nogmaals groeperen, en dan de hoogste score eruit halen:

SQL:
1
2
3
4
5
6
7
8
9
SELECT TOP 25 x.cursist, MAX(x.punten) AS punten
FROM
(
    SELECT s.cursist, SUM(s.score) AS punten, s.session_uid FROM web_games_scores AS s
    WHERE s.game_uid = 1
    GROUP BY s.cursist, s.session_uid
) x
GROUP BY x.cursist
ORDER BY MAX(x.punten) DESC

Acties:
  • 0 Henk 'm!

  • Moraelyn
  • Registratie: Januari 2007
  • Laatst online: 12-08-2024
Lijkt me voldoende als je SUM(s.score) vervangt door MAX(s.score). Een sum zal alle scores bij elkaar op gaan tellen.