SQL: Wie man einen Durchschnitt von einer Abfrage berechnet



sql summe mehrere zeilen (1)

Ich verwende SQL für ungefähr eine Woche bei meinem ersten Vollzeitjob und versuche, einige Statistiken aus einer Abfrage zu berechnen, in der ich Spalten aus separaten Tabellen kombiniert habe.

Insbesondere versuche ich, einen Durchschnitt aus einer kombinierten Tabelle zu berechnen, wo ich Filter (oder Einschränkungen? Ich bin nicht klar auf dem SQL-Jargon) angewendet habe.

Aus Recherchen bei Google habe ich gelernt, wie man einen Durchschnitt berechnet:

SELECT AVG(column_name) 
FROM table_name

Das Problem, das ich habe, ist, dass dies nur mit vorhandenen Tabellen in der Datenbank funktioniert, nicht mit neuen Abfragen, die ich erstellt habe.

Eine vereinfachte Version meines Codes ist wie folgt:

SELECT 
    Animal_Facts.Animal_Name, Animal_Facts.Prev_Reg_Amount, 
    Names.Given_Name, Animal_Class.Class_Description
FROM 
    Names
INNER JOIN
    Animal_Facts ON Names.Name_Key = Animal_Facts.Name_Key
INNER JOIN 
    Animal_Class ON Animal_Facts.Class_Key = Animal_Class.Class_Key

Diese Abfrage erstellt kombiniert vier Spalten aus drei Tabellen, wobei Class_Description beschreibt, ob das Tier desexed ist, Mikrochip, im Besitz eines Rentners etc, und Pre_Reg_Amount ist die Registrierungsgebühr bezahlt.

Ich möchte die durchschnittliche Gebühr für Rentner ermitteln. Daher habe ich die folgende Codezeile eingefügt, um die Tabelle zu filtern:

AND Animal_Class.Class_Description LIKE ('%pensioner%')

Und dann, um den Durchschnitt zu berechnen, füge ich hinzu:

SELECT AVG(Animal_Facts.Prev_Reg_Amount) from Animal_Facts

Also mein Gesamtcode ist:

SELECT 
    Animal_Facts.Animal_Name, Animal_Facts.Prev_Reg_Amount, 
    Names.Given_Name, Animal_Class.Class_Description
FROM 
    Names
INNER JOIN
    Animal_Facts ON Names.Name_Key = Animal_Facts.Name_Key
INNER JOIN
    Animal_Class ON Animal_Facts.Class_Key = Animal_Class.Class_Key
                 AND Animal_Class.Class_Description LIKE ('%pensioner%')

SELECT AVG(Animal_Facts.Prev_Reg_Amount) 
FROM Animal_Facts

Jetzt ist das Problem, nachdem ich diese Berechnung in Excel überprüft habe, bekomme ich nicht den Durchschnitt der Rentnerdaten, sondern den Durchschnitt aller Daten. Gibt es eine Möglichkeit, Durchschnittswerte (und andere Statistiken) direkt aus meiner erstellten Tabelle in SQL zu berechnen?

Hinweis: Ich kann all diese Statistiken berechnen, indem ich die Daten nach Excel exportiert, aber es ist viel zeitaufwendiger. Ich würde viel lieber lernen, wie man das in SQL macht.


SELECT AVG(af.Prev_Reg_Amount)
FROM
    Animal_Facts af
    INNER JOIN Animal_Class ac
    ON af.Class_Key = ac.Class_Key
    AND Class_Description LIKE ('%pensioner%')




sql-server-2012