Autor | Zpráva | ||
---|---|---|---|
rendolf Profil * |
#1 · Zasláno: 2. 10. 2008, 23:22:22
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 |
#2 · Zasláno: 3. 10. 2008, 16:06:07
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é. |
||
Časová prodleva: 8 dní
|
|||
TomášK Profil |
#4 · Zasláno: 12. 10. 2008, 03:02:27 · Upravil/a: TomášK
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. |
||
Časová prodleva: 17 let
|
0