Autor | Zpráva | ||
---|---|---|---|
Zdrh Profil * |
#1 · Zasláno: 26. 10. 2006, 21:59:14
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 |
#2 · Zasláno: 26. 10. 2006, 22:19:20 · Upravil/a: finc
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 |
#3 · Zasláno: 26. 10. 2006, 22:19:59
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 * |
#4 · Zasláno: 26. 10. 2006, 23:20:55
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 |
#5 · Zasláno: 27. 10. 2006, 00:08:55 · Upravil/a: djlj
Možná nějak takto...
SELECT jmeno, SUM(hodnota) AS hodnota FROM tabulka GROUPY BY jmeno ORDER BY hodnota DESC LIMIT 10 |
||
Kajman_ Profil * |
#6 · Zasláno: 27. 10. 2006, 09:48:18
V mysql to asi bude oříšek :-)
|
||
harmonie Profil |
#7 · Zasláno: 27. 10. 2006, 10:43:47 · Upravil/a: harmonie
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.
|
||
Zdrh Profil * |
#8 · Zasláno: 27. 10. 2006, 22:09:46
pomocí cyklu mně to je celkem jasné, ale já jsem chtěl, jestli by to šlo pomocí jediného dotazu
|
||
finc Profil |
#9 · Zasláno: 29. 10. 2006, 13:25:30
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. |
||
Časová prodleva: 17 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0