Autor Zpráva
MaK
Profil
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
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
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
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
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
Díky všem!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0