Autor Zpráva
JardaB
Profil
Zdravím,

potřeboval bych poradit s následujícím dotazem. Zjednodušeně mám dvě tabulky.

Tabulka klient, sloupece id, name
Tabulka vysledky, sloupce id, id_klient, hodnota

Potřebuji výpis každého klienta se sumou 5-ti nejvyšších hodnot.
Je nutné k tomuto případu použít korelovaného poddotazu pro nalezení hranice? Dlouho jsem se v tom nepohyboval a prakticky potřebuji napsat jen tento dotaz, tedy si jdu pro radu sem.
Kajman
Profil
Máte už konečně databázi s podporou window funkcí? Pro otestování můžete zkusit dotaz
select row_number() over() as rn from dual
Pak to je brnkačka.

Pokud stále bez window funkcí, je možné např. sečít pět poddotazů s limit 1 a různým offsetem 0-4 ošetřených pro součet náhradou null hodnoty za 0.
JardaB
Profil
Kajman:
Ano, vypadá to, že mám podporu window funkcí.
Kajman
Profil
Tak to půjde něco jako

SELECT x.id_klient,
       Sum(x.hodnota) top5
FROM   (SELECT v.id_klient,
               v.hodnota,
               Row_number()
                 OVER(
                   partition BY id_klient
                   ORDER BY v.hodnota DESC) poradi
        FROM   vysledky v) x
WHERE  x.poradi <= 5
GROUP  BY x.id_klient  
JardaB
Profil
Kajman:
Úžasné, vyzkouším zítra a dám vědět. Děkuji za ochotu.
JardaB
Profil
Frspoken:

Ano v ostrém provozu se to jeví, že jede po přepsání na můj příklad. Ale na localhost nemám podporu window funkcí a nevím jak je rozjet. Mám nainstlalovné easyphp devserver, mysql ver. 5.7.17.
anonym_
Profil *
JardaB:
Obecně bych ti doporučil mít na lokále i na ostrém serveru stejné nastavení. Vlastně moc nevím, jak tímhle způsobem můžeš cokoliv rozumně vyvíjet.

Njejednoduší bude na localhost nainstalovat stejnou verzi DB, jakou máš na serveru. Jestli máš problém s tímto konkrétním krokem, ptej se konkrétně.
JardaB
Profil
anonym:
Ano to dává smysl, nicméně již nic aktivně nevyvíjím. Na požadavek starého klienta dělám jistou jednorázovou úpravu, proto se mi zdálo zbytečné instalovat přesně totéž co má klient na serveru.
anonym_
Profil *
OK, tak v tom případě to trochu chápu, i když vlastně nechápu... :-) Vyvíjet na ostrém serveru mi nepřijde OK ani v případě minoritní úpravy u letitého klienta, ale lidsky chápu, že nechceš ztrácet čas přípravou localhostu, přenášením verzí projektu (v Gitu pravděpodobně nebude), atd.

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