Liczenie średniej wartości wedle wybranych kryteriów - SQL

0

Mamy następujące tabele : gracze, użytkownicy rankingi.
Każdy użytkownik może mieć wielu graczy, jeden gracz może należeć tylko do jednego użytkownika. Każdy gracz ma 1 wiersz z rankingiem, mamy rankingi, ofensywny, defensywny, rozgrywającego i całkowity. Tabela z rankingami zawiera id_gracza i wspomniane rankingi. Tabele są połączone odpowiednimi kluczami obcymi.

Klient zażyczył sobie coś takiego : gdy jest włączona dana opcja, rankingi graczy wyświetlane są w systemie jako średnia arytmetyczna wszystkich graczy należących do tego samego użytkownika. Czyli wszyscy gracze należący do jednego użytkownika będą mieli te same rankingi po włączeniu tej opcji. Zaznaczam, że interesuje mnie jedynie pobranie danych i wyświetlenie ich, nie trzeba modyfikować istniejących wierszy. Chcemy uzyskać wiersze z następującymi kolumnami : player_id, offensive_rating, defensive_rating, overall_rating, quaterback_rating. Oczywiście odpowiednio policzone jako średnia arytmetyczna. Pytanie jak napisać takie zapytanie, które pobierze dane w opisany sposób i zwróci w formie jak opisałem?

2

Zapytanie grupujace z agregatem AVG

0

Albo nie rozumiem Twojego opisu - albo to jest dokładnie tak jak napisał migający Marcin, mniej więcej :

WITH avgPlayer as 
(SELECT UserID, AVG(offensive) offensive_rating, AVG(defensive) defensive_rating, AVG(overall) overall_rating, AVG(quaterback) quaterback_rating
FROM users u 
JOIN players p 
   ON u.UserID = p.UserID 
JOIN rankings r 
  ON p.playerID = r.playerID
GROUP BY UserID 

SELECT p.playerID, a.offensive_rating, a.defensive_rating, a.overall_rating, a.quaterback_rating
FROM players p
JOIN avgPlayer a
   ON p.UserID = a.UserID

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