Bij het zoeken naar een goede manier om rankings uit te rekenen ben ik op deze website terecht gekomen
http://www.1keydata.com/sql/sql-rank.html
Wat ze hier doen is simpel, Selecteer de dataset 2x, en gebruik de 2e result set om alle scores hoger en gelijk dan een record te tellen. Dit is de rank.
In mijn situatie echter, zorgt dit voor een probleem. Mijn scores worden dynamisch berekend en komen niet direct uit de database. Als ik voor zowel dataset 1 als dataset 2 (in het voorbeeldje a1 en a2 genoemd) deze tamelijk complexe query uit moet voeren, duurt deze plots 3+ seconden ipv ~350ms.
Ik denk er vast compleet naast, maar kan ik niet iets doen als:
Dit geeft echter de error dat a1 niet bekend is in mijn database. Ik moet per sé die complexe query 2x uitvoeren om dit te bereiken.
Is er een handigere manier om dit te bereiken?
http://www.1keydata.com/sql/sql-rank.html
Wat ze hier doen is simpel, Selecteer de dataset 2x, en gebruik de 2e result set om alle scores hoger en gelijk dan een record te tellen. Dit is de rank.
In mijn situatie echter, zorgt dit voor een probleem. Mijn scores worden dynamisch berekend en komen niet direct uit de database. Als ik voor zowel dataset 1 als dataset 2 (in het voorbeeldje a1 en a2 genoemd) deze tamelijk complexe query uit moet voeren, duurt deze plots 3+ seconden ipv ~350ms.
Ik denk er vast compleet naast, maar kan ik niet iets doen als:
code:
1
2
3
4
5
6
7
| SELECT * FROM (SELECT [complexe query]) AS a1, (SELECT a1) AS a2 WHERE a1.score<= a2.score OR (a1.score = a2.score AND a1.team_id = a2.team_id) GROUP BY a1.team_id, a1.score ORDER BY a1.score DESC, a1.team_id DESC; |
Dit geeft echter de error dat a1 niet bekend is in mijn database. Ik moet per sé die complexe query 2x uitvoeren om dit te bereiken.
Is er een handigere manier om dit te bereiken?