Mysql
 sql >> Datenbank >  >> RDS >> Mysql

AVG() – Berechnen Sie den Durchschnittswert einer Spalte in MySQL

Wenn Sie MySQL verwenden, können Sie AVG() verwenden Funktion zur Berechnung des Durchschnittswertes aus einer Reihe von Werten.

Sie können diese Funktion beispielsweise verwenden, um herauszufinden, wie hoch die durchschnittliche Stadtbevölkerung für ein bestimmtes Land oder Bundesland ist. Angenommen, ein Land hat viele Städte mit jeweils unterschiedlichen Einwohnerzahlen, können Sie den Durchschnitt zwischen ihnen herausfinden. Eine Stadt hat vielleicht 50.000 Einwohner, während eine andere 500.000 Einwohner hat. Der AVG() berechnet den Durchschnitt für Sie.

Syntax

Die Syntax von AVG() geht so:

AVG([DISTINCT] expr) [over_clause]

Wobei expr ist der Ausdruck, für den Sie den Durchschnitt wünschen.

Die over_clause ist eine optionale Klausel, die mit Fensterfunktionen arbeitet. Die Funktionsweise von Fensterfunktionen besteht darin, dass für jede Zeile einer Abfrage eine Berechnung unter Verwendung von Zeilen durchgeführt wird, die sich auf diese Zeile beziehen. In diesem Fall die over_clause gibt an, wie Abfragezeilen zur Verarbeitung durch die Fensterfunktion in Gruppen aufgeteilt werden. Beachten Sie, dass die over_clause kann nur verwendet werden, wenn Sie den DISTINCT nicht verwenden Schlüsselwort.

Rohdaten

Hier sind zunächst die Rohdaten, die wir für die Beispiele auf dieser Seite verwenden:

SELECT Name, District, PopulationFROM CityWHERE CountryCode ='AUS';

Ergebnis:

+----------+----------------+----------- +| Name | Bezirk | Bevölkerung |+----------+----------------+------------+ | Sydney | Neusüdwales | 3276207 || Melbourne | Viktoria | 2865329 || Brisbane | Queensland | 1291117 || Perth | Westaustralien | 1096829 || Adelheid | Südaustralien | 978100 || Canberra | Hauptstadtregion | 322723 || Goldküste | Queensland | 311932 || Neuburg | Neusüdwales | 270324 || Zentrale Küste | Neusüdwales | 227657 || Wollongong | Neusüdwales | 219761 || Hobart | Tasmanien | 126118 || Geelong | Viktoria | 125382 || Stadtville | Queensland | 109914 || Steinhaufen | Queensland | 92273 |+---------------+----------------+------------+ 

Einfaches Beispiel

Wie Sie den obigen Rohdaten entnehmen können, haben einige „Distrikte“ mehr als eine Stadt, und jede Stadt hat eine andere Bevölkerung. Wir können den AVG() verwenden Funktion, um die durchschnittliche Bevölkerung der Städte in jedem Bezirk zu ermitteln:

SELECT District, AVG(Population) AS 'Average Population'FROM CityWHERE CountryCode ='AUS'AND District ='New South Wales';

Ergebnis:

+------------+--------------------+| Bezirk | Durchschnittliche Bevölkerung |+------------+--------------------+| Neusüdwales | 998487.2500 |+------------+--------------------+

Wir können also sehen, dass New South Wales eine durchschnittliche Stadtbevölkerung von 998487,2500 hat.

Rundung des Durchschnitts

Sie haben wahrscheinlich bemerkt, dass das Ergebnis aus dem vorherigen Beispiel ziemlich genau war – es lieferte ein Ergebnis mit vier Dezimalstellen. In unserem Fall ist das wahrscheinlich etwas zu viel. Wir brauchen kein Ergebnis bis zur vierten Dezimalstelle. Daher können wir den ROUND() verwenden Funktion, um es auf die nächste ganze Zahl zu runden (oder auf eine bestimmte Anzahl von Dezimalstellen, wenn wir dies wünschen).

Hier ist ein Beispiel für das Runden des Ergebnisses auf die nächste ganze Zahl:

SELECT District, ROUND(AVG(Population)) AS 'Average Population'FROM CityWHERE CountryCode ='AUS'AND District ='New South Wales';

Ergebnis:

+------------+--------------------+| Bezirk | Durchschnittliche Bevölkerung |+------------+--------------------+| Neusüdwales | 998487 |+------------+--------------------+

Standardmäßig ist das ROUND() Funktion rundet auf die nächste ganze Zahl. Alternativ hätten wir ein zweites Argument angeben können, um eine Anzahl von Dezimalstellen anzugeben, aber in diesem Fall wollen wir das nicht.

Die GROUP BY-Klausel

Wir können den GROUP BY verwenden Klausel zur Auflistung aller Bezirke/Staaten zusammen mit ihrer durchschnittlichen Stadtbevölkerung:

SELECT District, ROUND(AVG(Population)) AS 'Average Population'FROM CityWHERE CountryCode ='AUS'GROUP BY District;

Ergebnis:

+------------+--------------------+| Bezirk | Durchschnittliche Bevölkerung |+------------+--------------------+| Neusüdwales | 998487 || Viktoria | 1495356 || Queensland | 451309 || Westaustralien | 1096829 || Südaustralien | 978100 || Hauptstadtregion | 322723 || Tasmanien | 126118 |+------------+--------------------+

Die ORDER BY-Klausel

Wir können auch den ORDER BY verwenden -Klausel, um eine Spalte anzugeben, nach der sortiert werden soll:

SELECT District, ROUND(AVG(Population)) AS 'Average Population'FROM CityWHERE CountryCode ='AUS'GROUP BY DistrictORDER BY `Average Population`;

Ergebnis:

+------------+--------------------+| Bezirk | Durchschnittliche Bevölkerung |+------------+--------------------+| Tasmanien | 126118 || Hauptstadtregion | 322723 || Queensland | 451309 || Südaustralien | 978100 || Neusüdwales | 998487 || Westaustralien | 1096829 || Viktoria | 1495356 |+------------+--------------------+

Beachten Sie, dass bei der Bestellung nach einem aus mehreren Wörtern bestehenden Alias ​​(wie `Average Population` ), müssen Sie das Backtick-Zeichen (`) verwenden ) anstelle des Apostrophs (' ), um die beiden Wörter einzuschließen.

Finden Sie die durchschnittliche Zeichenlänge

Der AVG() Die Funktion ist nicht auf Spalten mit numerischen Daten beschränkt. Sie können auch AVG() kombinieren mit anderen Funktionen, um Durchschnittswerte in anderen Bereichen zu finden.

Anhand unserer Beispieldaten können wir beispielsweise die durchschnittliche Zeichenlänge aller Werte in City finden Spalte:

SELECT ROUND(AVG(CHAR_LENGTH(Name))) AS 'Durchschnittliche Zeichenlänge'FROM cityWHERE CountryCode ='AUS'AND District ='New South Wales';

Ergebnis:

+---------------------+| Durchschnittliche Zeichenlänge |+---------------------+| 10 |+---------------------+

Eine OVER-Klausel verwenden

Wie bereits erwähnt, erlaubt die Syntax ein OVER Klausel, die in Ihre Abfragen aufgenommen werden soll. Das kann etwas komplex werden, aber im Grunde ist das OVER -Klausel können Sie angeben, wie Abfragezeilen zur Verarbeitung durch die Fensterfunktion in Gruppen aufgeteilt werden.

Hier ist ein Beispiel:

SELECT District, Name AS City, Population, ROUND(AVG(Population) OVER(PARTITION BY District)) AS 'District Avg'FROM CityWHERE CountryCode ='AUS'ORDER BY District;

Ergebnis:

+------------+---------------+------------ +--------------+| Bezirk | Stadt | Bevölkerung | Bezirk Durchschn. |+------------+---------------+------------ +--------------+| Hauptstadtregion | Canberra | 322723 | 322723 || Neusüdwales | Sydney | 3276207 | 998487 || Neusüdwales | Wollongong | 219761 | 998487 || Neusüdwales | Neuburg | 270324 | 998487 || Neusüdwales | Zentrale Küste | 227657 | 998487 || Queensland | Stadtville | 109914 | 451309 || Queensland | Brisbane | 1291117 | 451309 || Queensland | Steinhaufen | 92273 | 451309 || Queensland | Goldküste | 311932 | 451309 || Südaustralien | Adelheid | 978100 | 978100 || Tasmanien | Hobart | 126118 | 126118 || Viktoria | Melbourne | 2865329 | 1495356 || Viktoria | Geelong | 125382 | 1495356 || Westaustralien | Perth | 1096829 | 1096829 |+------------+---------------+------------+ --------------+

In diesem Beispiel werden die Zeilen nach District partitioniert , wobei der Durchschnitt für jede Partition (Distrikt) bereitgestellt wird. Auf diese Weise können Sie detailliertere Daten anzeigen, z. B. die Stadtbevölkerung, zusammen mit der durchschnittlichen Bevölkerung des Bezirks, zu dem sie gehört.