Użycie funkcji avg na podstawie funkcji count

0

Cześć. Proszę o pomoc w dokończeniu zapytania, które na podstawie wybranej ilości wydanych albumów per artysta (dla uproszczenia niech to będzie "a"), policzy średnią wydanych albumów da wszystkich artystów ("b") i na końcu w klauzuli where ograniczy wyniki tylko do tych rekordów, gdzie a > b.
Na razie mam tak napisane zapytanie:

SELECT a.name,
       b.title,
       (
           SELECT count(artistid) 
             FROM album
            WHERE artistid = b.artistid
       )
       AS ilosc
  FROM artist a,
       (
           SELECT title,
                  artistid
             FROM album
       )
       AS b
 WHERE b.artistid = a.artistid
 order by 1;

a oto jego wyniki:

screenshot-20210717232859.png

i teraz chodzi o to, żeby dodać czwartą kolumnę średnia, która doda np. 11 albumów Deep Purple, 2 Djavan, etc.
a następnie podzieli przez ilość artystów.
Z góry dziękuję za wszystkie sugestie.

1

Wygląda jakbyś potrzebował HAVING, GROUP BY.

0
vpiotr napisał(a):

Wygląda jakbyś potrzebował HAVING, GROUP BY.

Tak się mniej więcej domyślam, że coś by trzeba pogrupować skoro ma być podsumowana ilość albumów per artysta. No i having też, skoro chcemy wyświetlić tylko takich, których mają więcej albumów niż średnia.

1

Nie mam pewności, czy SQLite obsługuje funkcje okna, ani czy to będzie działać optymalnie (może należałoby jednak robić kilka podzapytań grupujących), ale przynajmniej zestaw danych powinno zwracać prawidłowy:

SELECT a.name
	,b.title
	,b.ten_artysta
	,b.srednia
FROM artist a
INNER JOIN (
	SELECT title
		,artistid
		,count(1) OVER (PARTITION BY artistid) ten_artysta
		,count(1) OVER (PARTITION BY '1') / (
			dense_rank() OVER (
				ORDER BY artistid
				) + dense_rank() OVER (
				ORDER BY artistid DESC
				) - 1
			) srednia
	FROM album
	WHERE artistid IS NOT NULL
	) b ON b.artistid = a.artistid
WHERE b.ten_artysta > b.srednia
0

@Fac: Dzięki Fac za odpowiedź.Też nie wiem, czy ten silnik obsługuje funkcje analityczne, ale jutro to sprawdzę

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