2016-07-19 10 views
0

ich die folgende TabelleSQL Durchschnitt Gruppierung In Tabelle

Type Group  Price 
1  A  600.00 
2  A  800.00 
3  B  300.00 
4  B  300.00 
5  B  400.00 
6  A  200.00 

Ich möchte zeigen die berechneten Mittelwerte entlang Gruppe mit Ausgabe wie folgt mit SQL Query haben.

Type Group  Price   Average By Group 
1  A  600.00    533.333 
2  A  800.00    533.333 
3  B  300.00    333.333 
4  B  300.00    333.333 
5  B  400.00    333.333 
6  A  200.00    533.333 

Ich würde wirklich schätzen, wenn jemand mir mit diesem in SQL helfen kann.

+3

Welche Datenbank benutzen Sie? Die Antwort hängt möglicherweise von systemspezifischen Funktionen ab. Markieren Sie die Frage daher mit der entsprechenden Datenbank. – jpw

Antwort

0

Ich bin nicht immer der Beste darin, etwas so effizient wie möglich zu machen und indem ich es anschaue, habe ich das Gefühl, dass es einen besseren Weg gibt, aber bis dahin sollte man mit etwas arbeiten können ...

SELECT *, (SELECT AVG(Price) FROM averageTest t2 WHERE t2.[Group] = t.[Group] GROUP BY t2.[Group]) as GroupAverage FROM averageTest t 
0

Die meisten Datenbanken unterstützen die ANSI-Standardfensterfunktionen. Dieses genau Ihr Problem lösen:

select t.*, 
     avg(price) over (partition by group) as average_by_group 
from t; 

Hinweis: group ist ein Schlüsselwort in SQL, so sollte es nicht als Spaltenname verwendet werden. Im Allgemeinen wird es nicht erkannt, es sei denn, es ist maskiert, die entsprechenden Escape-Zeichen für Ihre Datenbank (in der Regel arbeiten doppelte Anführungszeichen).