max z sumy

0

Cześć,

Mam pewien problem z napisaniem zapytania które początkowo wydało mi się banalne.

Przykładowo tabela:

  create table tabela (
      id integer not null,
      typ_zwierzecia integer not null,
      liczba_zwierzat integer not null,
      nazwa_schroniska varchar(50) not null,
      unique(id)
  );
  

Potrzebuję zapytania które zwróci mi informacje, które schronisko ma największą liczbę zwierząt gdzie typ_zwierzecia to np 10. Select ma pokazywać liczbę oraz nazwę schroniska.
Trzeba uwzględnić, że w kilku schroniskach może być dokładnie tyle samo zwierzaków o danym typie wtedy ma pokazać dokładnie dwa lub więcej rekordy. Należy mieć też na uwadze, że może być kilka wpisów dotyczących tego samego zwierzaka w tym samym schronisku, tak więc najpierw trzeba by dodać wartości z kolumny liczba_zwierzat dla tych samych zwierzaków w tych samych schroniskach.

Podobno da się to zrobić jednym większym selectem (z joinami podzapytaniami). Ja to zrobiłem najpierw robiąc sumę z liczby zwierzat grupując po nazwie schroniska. Później wyciągnąłem max z liczba_zwierzat i przypisałem do zmiennej. Następnie zrobiłem kolejne zapytanie gdzie znów zrobiłem grupowianie po nazwa_schroniska wykorzystując sumę jako funkcję agregującą i w having dałem wcześniej zapisany max

Pomoże ktoś? :)

1
select 
  nazwa_schroniska, 
  sum(liczba_zwierzat) 
from 
  tabela 
where 
  typ_zwierzecia = 10 
group by 
  nazwa_schroniska 
having 
  sum(liczba_zwierzat) = (
  select 
    max(sum(liczba_zwierzat)) 
  from 
    tabela 
  where 
    typ_zwierzecia = 10 
  group by 
    nazwa_schroniska)
0
WITH SumaZwierzakow  (Suma_zwierzat, nazwa_schroniska)
AS
(
Select sum(liczba_zwierzat) as Suma_zwierzat, nazwa_schroniska 
FROM tabela
Where typ_zwierzecia = 10
Group by nazwa_schroniska 
)

SELECT RANK() OVER( ORDER BY Suma_zwierzat DESC) AS KolejnoscSchronisk, nazwa_schroniska
FROM SumaZwierzakow  

Tak z pamięci pisze ... nie sprawdzone ale coś w ten desen możesz iść ... na koncu tylko jescze filtrujesz KolejnoscSchronisk = 1 i git. ... generalnie sprawdz po pozno i moga byc bledy :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1