Witam wszystkich serdecznie,
dopiero zaczynam swoją przygodę z Oracle SQL i po raz pierwszy napotykam na ścianę, dlatego proszę o pomoc. Mam do wyliczenia średnią z wartości w kolumnie B, ale jedynie dla unikalnych wartości z kolumny A. Były próby z case, ale nie przyniosły rezultatu :(
Tak możesz zidentyfikować, te które są unikalne.
select a from tabelka group by a having count(0)=1;
Odfiltrować na podstawie podzapytania potrafisz?
Select AVG(b) from (select a,b from t Group by a, b having count(*)=1) as dt
SELECT AVG(DISTINCT liczba) FROM tabela
https://dbfiddle.uk/?rdbms=oracle_11.2&fiddle=6b96ffea170a25f70ab9504c184222d4
Dziękuję za odpowiedzi
@yarel nie wiem, czy na pewno rozumiem co masz na myśli z tym odfiltrowaniem
@Panczo dzięki, spróbuję :)
@Marcin.Miga rzecz w tym, że nie chodzi o wyciąganie średniej z unikalnych wartości w kolumnie B tylko średnią z kolumny B dla unikalnych nazw w kolumnie A
@dott, to co chcesz zrobić wg twojego opisu jest bez sensu.
Załóżmy, ze masz takie rekordy:
A B
'a' 1
'a' 2
'b' 3
'b' 4
Masz dwie wartości w kolumnie A
unikalne - a
i b
. Które wartości z kolumny B
mają być brane do średniej?
@Marcin.Miga ja interpretuję trochę inaczej postawione zagadnienie. Może źle, ale to już autor problemu powinien się wypowiedzieć.
A B
'a' 1
'a' 2
'b' 3
'b' 4
'c' 3
'd' 5
'e' 8
Tu: a i b nie są unikalne (bo istnieje wiele wpisów per A), pozostają: c,d i e i chodzi o średnią 3,5,8.
Coś w stylu:
select avg(b) from tabelka where a in (select a from tabelka group by a having count(0)=1);
select avg(t1.b) from tabelka t1, (select a from tabelka group by a having count(0)=1) t2 where t1.a=t2.a;
select avg(t1.b) from tabelka t1 where exists (select 1 from (select a from tabelka group by a having count(0)=1) t2 where t2.a=t1.a);
Dla podanego przykładu chodzi o wyliczenie średniej dla 'a' czyli 1,5; dla 'b' 3,5 itp. Mm nadzieję, że teraz wyrażam się jasno ;)
@dott ty piszesz o przykladowych danych @Marcin.Miga ?
Jak tak to to jest najzwyklejsze grupowanie:
select a, avg(b) from t group by a
Chyba, że nie rozumiem....