2016-07-07 13 views
0

Ich baue (in Rails) eine App, um NBA-Daten zu kratzen (hauptsächlich für meine eigene Erbauung und ein Lernwerkzeug). Ich habe mit postgresql von Grund auf angefangen, weil es einfach mehr Sinn macht, wenn ich damit hosten werde. Das Datenbankschema ist genau so eingerichtet, wie ich es möchte here.Wie berechne ich den Durchschnitt, wenn die Zahlen gruppiert werden

Teilnehmerinstanzen basieren auf einem TEAM-Konzept Statistische Instanzen basieren auf einem PLAYER-Konzept und daher bilden viele Instanzen der Statistik die "Gesamtsummen" für den Teilnehmer.

Die folgende Abfrage:

Select SUM(steals) from statistics 
INNER JOIN participants on statistics.participant_id = participants.id 
INNER JOIN teams on participants.team_id = teams.id 
WHERE teams.id = 15 
GROUP BY statistics.participant_id; 

Ausbeuten (in der psql-Terminal app)

sum 
----- 
    8 
    7 
    5 
    7 
    6 
    7 
    10 
    6 
    7 
    6 
    7 
    5 
    9 
    11 
    4 
    7 
    8 

Wie kann ich die SQL-Abfrage schreiben um den Durchschnitt zu berechnen, basierend auf diesen 17 Zeilen

(Bearbeiten, um die Abfrage zu vereinfachen und nur eine Frage zu stellen)

+0

@MageeWorld Sie sind in der Nähe zu tun, was Sie wollen.Gehen Sie es versuchen und betrachten 'Aggrigate Funktionen' wie 'AVG()' für diese. –

+0

Verwenden Sie einen Subselect: 'SELECT ... VON (SELECT ... GROUP BY ...) s GROUP BY ...' –

+0

@CoderofCode Ich weiß über Aggregatfunktionen (obwohl die meisten meiner Erfahrung in MySQL ist), aber ich weiß nicht, wie Sie die Aggregatabfrage in einer durchschnittlichen Abfrage umschließen – MageeWorld

Antwort

0

Verwenden Sie die folgende Abfrage zu wrap your query

Auf einigen Systemen können Sie auch eine Fensterfunktion verwenden, die die äußere Abfrage nicht erfordert. Die Syntax für das aussieht wie diese

AVG(sum) OVER() as avg 

da die durchschnittlich Sie suchen, das Ergebnis einer Gruppierung ist, dass Sie es hier nicht verwenden können.

+0

Was Sie mir gaben, wies mich in die richtige Richtung, obwohl für meine Bedürfnisse - das ist was funktioniert * Wählen Sie AVG (Summe) FROM (meine Abfrage) als Summe; '* (ps - mache ich etwas falsch oder kann man nicht treffen "Return" in den Edits? – MageeWorld

+0

@MageeWorld 'SELECT AVG (Summe) AS Summe FROM (stuff);' ist der Standard Weg, um es zu schreiben - aber es scheint in Ordnung. – Hogan

Verwandte Themen