Autor | Zpráva | ||
---|---|---|---|
MaK Profil |
#1 · Zasláno: 30. 7. 2019, 15:43:01
Mám tabulku scores(game, user, time) a chci zjistit pořadí konkretniho hráče v konkretni hře.
Vyšlo mi tohle: SELECT DENSE_RANK() OVER (ORDER BY time) FROM scores WHERE game='doom' ORDER BY user=666 DESC LIMIT 1 Ale to "ORDER BY user=666 DESC" se mi zdá přitažené za vlasy. Nedělá se to jinak? |
||
Kajman Profil |
#2 · Zasláno: 30. 7. 2019, 15:55:53
Spíše se to řeší poddotazem na game. A venku omezení na uživatele.
Ale často stačí i obyčejné select count(*)+1 rank from scores where game='doom' and time<'casuzivatele666' |
||
MaK Profil |
#3 · Zasláno: 30. 7. 2019, 16:23:39
Kajman:
„Spíše se to řeší poddotazem na game. A venku omezení na uživatele.“ Mohl by jste to, prosím, trochu více popsat? A už dám pokoj :) |
||
Kajman Profil |
#4 · Zasláno: 30. 7. 2019, 16:48:49
SELECT * FROM ( SELECT user, DENSE_RANK() OVER (ORDER BY time) FROM scores WHERE game='doom' ) t WHERE user=666 DESC A v té verzi bez window funkce by to pro dense_rank bylo count(distinct time)+1 |
||
Tomášeek Profil |
#5 · Zasláno: 30. 7. 2019, 16:48:52
MaK:
Co konkrétně na uvedeném dotazu nechápeš? Spočítas hráče s nižším časem a přičtes jedničku (pokud je hráčů s nižším časem 10, tvůj rank je 11) |
||
MaK Profil |
#6 · Zasláno: 30. 7. 2019, 17:11:25
Díky všem!
|
||
Časová prodleva: 6 let
|
0