[firebird] Średnia z kilku kolumn
punto - 03-12-2005 15:51
[firebird] Średnia z kilku kolumn
Witam Mam taki problem. Jest tabela: id col1 col2 col3 col4 Teraz col4 ma zawierać średną z col1+col2+col3, jednak może być tak, że któraś z kolumn będzie NULL. Jak z tego wybrnąć i jak najlepiej to zaimplementować? Dużo szukałem na ten temat, kombinuję z COALESCE ale jakoś zupełnie mi nie wychodzi :(
Bartek Dajewski - 09-12-2005 19:53
Cześć.
Użytkownik "punto" <puntoWYWALTO@down.pl> napisał w wiadomości news:dmrvqn$9ib$1@atena.e-wro.net... > Witam > Mam taki problem. Jest tabela: > id > col1 > col2 > col3 > col4 > Teraz col4 ma zawierać średną z col1+col2+col3, jednak może być tak, że > któraś z kolumn będzie NULL. Jak z tego wybrnąć i jak najlepiej to > zaimplementować? Dużo szukałem na ten temat, kombinuję z COALESCE ale jakoś > zupełnie mi nie wychodzi :(
To zależy jak chcesz traktować Null. Czy np. srednia(null, null, 3) jes równa 3 czy 1?
select id, col1, col2, col3, case when col1 is null and col2 is null and col3 is null then null else (coalesce(col1, 0)+coalesce(col2, 0)+coalesce(col3, 0))/ (case when col1 is null then 0 else 1 end + case when col2 is null then 0 else 1 end + case when col3 is null then 0 else 1 end) end srednia from tabela
lub
select id, col1, col2, col3, case when col1 is null and col2 is null and col3 is null then null else (coalesce(col1, 0)+coalesce(col2, 0)+coalesce(col3, 0))/3 end srednia from tabela
Możesz też zbudować widok, który zwróci id i wszystkie wartości col1...col3 jedną pod drugą: (w jednej kolumnie):
select id, col1 union all select id, col2 union all select id, col3
.... i na tym widoku zastosować
select id, avg(kolumna) from widok group by id
ale to chyba źle się odbije na wydajności. -- Pozdrawiam :-) Bartek
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Firebird - zmiana NULL na NOT NULL
[firebird] Czym =?ISO-8859-2?Q?zast=B1pi=E6_postgresowy_inte?==?ISO-8859-2?Q?rval_=3F?=
Insert do tabeli danymi z innej tabeli Firebird
Insert do tabeli z danych innej tabeli plus dodatkowa wartośćpola (Firebird)
Jak =?ISO-8859-2?Q?zamieni=E6_dwa_pola_jednej_kolumny_?==?ISO-8859-2?Q?w_dw=F3ch_rekordach_za_pomoc=B1_jednego_zapyt? ==?ISO-8859-2?Q?ania=3F?=
firebird - dostep do roznych baz na podstawie nazwy usera,hasla i adresu IP
[mysql] =?ISO-8859-2?Q?po=B3=B1czenie_tabel_wg_kolumn=2C_?==?ISO-8859-2?Q?nie_wierszy?=
ms sql server - =?ISO-8859-2?Q?domy=B6lny_format_kolumn_ty?==?ISO-8859-2?Q?pu_datetime?=
[ORACLE] Dodanie kolumny typu BLOB - =?ISO-8859-2?Q?wp=B3yw_na?==?ISO-8859-2?Q?_wydajno=B6c?=
=?iso-8859-2?q?Konfiguracja_Firebirda_pod_k=B1tem_wykorzystan ia_pami=EAci?=
zanotowane.pldoc.pisz.plpdf.pisz.plshutter.opx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|