Autor Zpráva
rendolf
Profil *
Ahoj,
už delší dobu přemýšlím, jak by šlo napodobit funkci max tak, abych ve výsledku nedostával pouze první maximální hodnotu, ale řekněmě prvních pět hodnot a zároveň dodržel seskupovaní...

Mám tabulku vysledky se sloupci ID_vysledek, ID_zavodnik, umisteni, body
Potřebuji vybrat pro každého závodníka pouze pět nejlepších výsledků(podle umístění) a jejich body sečíst (údaje pro celkový žebříček).

Výsledek si představuji tak, aby vždy každý řádek odpovídal jednomu závodníkovi a byl tvaru: ID_zavodnik, soucet_peti_nej_zavodu

Napadá někoho řešení, jak to udělat v mysql, nebo už je to záležitost pro php...?

Předem děkuji za odpovědi. Kdyby nebyl dotaz dost zřejmý, ptejte se! ;-)
leossilny
Profil
Už to tady bylo propíráno - vnořený select nepomůže?
select sloupec1, sloupec2, (select neco z neceho) as sloupec3 ....
Kajman_
Profil *
Seznam pěti výsledků oddělených čárkou by mohl vypadnout z něčeho takového
select id_zavodnik, substring_index(group_concat(body order by body desc separator ','),',',5) seznam_5_bodu
from vysledky
group by id_zavodnik


Nebo použít korelovaný poddotaz, jak radí leossilny - tam by to mohlo být už i sečtené.
TomášK
Profil
Napadlo mě řešení v podobě následujícího dotazu:
SET @poradi := 0;
SET @zavodnik := 0;

SELECT 
    zavodnik
    SUM(body)     
FROM (
    SELECT
        @poradi := @poradi*(@zavodnik=zavodnik)+1 AS poradi, 
        @zavodnik := zavodnik AS zavodnik,
        body
    FROM zebricek
    ORDER BY zavodnik,vysledek
    ) AS t
WHERE poradi < 5
GROUP BY zavodnik


@poradi čísluje záznamy, *(@zavodnik=zavodnik) vynuluje @poradi pokaždé, když narazím na dalšího závodníka.

Spoléhám na pořadí, ve kterém MySQL vyhodnocuje jednotlivé řádky - aneb do @poradi se musí dosadit dřív než do @zavodnik, jinak to pochopitelně nebude fungovat. Tipuju, že to není korektní, nemám zaručeno, v jakém pořadí se řádky vyhodnotí (ví někdo zasvěcený?).

Nicméně zkoušel jsem to na jednoduchém příkladu a fungovalo to.

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: