Autor Zpráva
DJ Miky
Profil
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
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
To už vyjde skoro nastejno, jako tři dotazy :-).
japlavaren
Profil
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 *
union all asi bude asi rychlejší než konstrukce typu
select avg(if(sloupec1=-1,null,sloupec1)) avg1 ...
japlavaren
Profil
Kajman_ - skus :)
_es
Profil
DJ Miky
Ak zameníš hodnoty -1 za NULL, tak to pôjde aj najrýchlejšie, aj najjednoduchšie.

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