Autor | Zpráva | ||
---|---|---|---|
DJ Miky Profil |
#1 · Zasláno: 5. 10. 2008, 18:55:29 · Upravil/a: DJ Miky
Zdravím všechny,
potýkám se s následujícím problémem (MySQL): Mám tabulku se třemi sloupci a potřebuji vypsat průměr hodnot v každém z nich, ovšem pouze hodnot, které se nerovnají -1. Třemi dotazy je to snadné, ale rád bych to vyřešil jedním. Příklad: sloupec1 sloupec2 sloupec3 ---------------------------- 2 4 -1 4 -1 8 -1 8 10 A potřebuji dostat výsledek: avg(sloupec1) = 3 avg(sloupec2) = 6 avg(sloupec3) = 9 Pokud tam dám podmínku <>-1 na všechny sloupce, tak budou výsledné průměry 0, protože každý řádek obsahuje alespoň jednou -1. Zkoušel jsem do dotazu dát i třikrát stejnou tabulku pod jiným jménem, ale to se mi nepodařilo sestavit jejich spojení. Budu rád za každé rady a návrhy, jak to vyřešit. Předem díky za ně. |
||
Alphard Profil |
#2 · Zasláno: 5. 10. 2008, 19:08:36
„Třemi dotazy je to snadné, ale rád bych to vyřešil jedním.“
Co třeba jeden hlavní dotaz a pak pár poddotazů? |
||
DJ Miky Profil |
#3 · Zasláno: 5. 10. 2008, 19:23:51
To už vyjde skoro nastejno, jako tři dotazy :-).
|
||
japlavaren Profil |
#4 · Zasláno: 5. 10. 2008, 19:30:55
jedine co ma napada tak to spravit ako samostatne dotazy a spojit UNION ALL - ak jeby si ich nejak nacpal do jedneho dotazu tak priemer sa pocita tak ci tak, a ked ich spojis cez union ti to prenese naraz (na stlpce si daj index)
|
||
Kajman_ Profil * |
#5 · Zasláno: 5. 10. 2008, 21:58:34
union all asi bude asi rychlejší než konstrukce typu
select avg(if(sloupec1=-1,null,sloupec1)) avg1 ... |
||
japlavaren Profil |
#6 · Zasláno: 6. 10. 2008, 22:04:06 · Upravil/a: japlavaren
Kajman_ - skus :)
|
||
_es Profil |
#7 · Zasláno: 6. 10. 2008, 22:27:33
DJ Miky
Ak zameníš hodnoty -1 za NULL, tak to pôjde aj najrýchlejšie, aj najjednoduchšie. |
||
Časová prodleva: 16 let
|
0