Autor Zpráva
Zdrh
Profil *
Mám tabulku se dvěma sloupci - jméno a hodnota. Potřebuju pro každé jméno vybrat 10 největších hodnot a následně těch 10 hodnot sečíst a seřadit ta jména podle součtů sestupně. Absolutně nevím, jak bych to mohl udělat v mySQL. Poradíte?
finc
Profil
Co tohle?

SELECT a.jmeno, b.hodnota
FROM tabulka AS a
INNER JOIN (SELECT SUM(hodnota) AS hodnota, jmeno FROM tabulka GROUP BY jmeno ORDER BY jmeno, hodnota DESC LIMIT 10) AS b ON a.jmeno = b.jmeno
ORDER BY b.hodnota DESC
finc
Profil
Netestoval jsem to, tak nevím, zda nemám někde chybu, ale něco v tomto smyslu by to mělo být :)
Zdrh
Profil *
tak toto nefunguje, protže o vyhodí pouze 10 součtů (pro 10 jmen) ale nikoliv součet 10 nejvyšších hodnot pro každé jméno
djlj
Profil
Možná nějak takto...

SELECT jmeno, SUM(hodnota) AS hodnota FROM tabulka GROUPY BY jmeno ORDER BY hodnota DESC LIMIT 10
Kajman_
Profil *
V mysql to asi bude oříšek :-)
harmonie
Profil
Myslím si, že to v jednom selectu nejde. Asi bych vytořil nějaké viewy a z nich dělal selecty. Asi by to obsahovalo i vnořené selecty. Prostě je to asi trochu složitější. Nějak se mi nechce přemýšlet.

A nebo pomocí pracovní tabulky. Prostě postupně, v cyklu naplňovat tabulku jmen a hodnot.



-- seznam jmen, slouží k cyklu
select distinct jmeno from tabulka order by jmeno;

-- toto je vnitřní cyklus, který načítá vždy údaje od jednoho jména
insert prac_tabulka column (jmeno, hodnota) as (
select select jmeno, hodnota from tabulka
where jmeno = $jmeno
order by hodnota desc
limit 10
);

-- a pak se to už jen posčítá
select jmeno, sum(hodnota) from prac_pom;
Zdrh
Profil *
pomocí cyklu mně to je celkem jasné, ale já jsem chtěl, jestli by to šlo pomocí jediného dotazu
finc
Profil
Myslím, že jinak než 2 selectama to nepůjde. Když bych tolik bazíroval na jednom selectu, asi bych si na to napsal uloženou proceduru.
V té je samozřejmě možné uchovat informaci jmeno, sum(10 největších zaznamů) a spojit to s výpisem, jinak to asi nepůjde.
Nemá smysl se za každou cenu snažit o jeden select, protože ve výsledků to může být mnohem pomalejší než míti dotazy 2. Ono všeobecně je známo, že podselecty jsou řádově pomalejší než joinované tabulky.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0