Mysql
 sql >> Baza danych >  >> RDS >> Mysql

AVG() – Oblicz średnią wartość kolumny w MySQL

Używając MySQL, możesz użyć AVG() funkcja do obliczenia średniej wartości z zakresu wartości.

Na przykład możesz użyć tej funkcji, aby dowiedzieć się, jaka jest średnia populacja miasta dla danego kraju lub stanu. Biorąc pod uwagę, że kraj będzie miał wiele miast, każde z inną populacją, możesz dowiedzieć się, jaka jest średnia między nimi. Jedno miasto może mieć populację, powiedzmy, 50 000, podczas gdy inne ma populację 500 000. AVG() funkcja obliczy średnią dla Ciebie.

Składnia

Składnia AVG() idzie tak:

AVG([DISTINCT] expr) [over_clause]

Gdzie expr to wyrażenie, dla którego chcesz uzyskać średnią.

over_clause to opcjonalna klauzula, która działa z funkcjami okna. Sposób działania funkcji okna polega na tym, że dla każdego wiersza z zapytania wykonaj obliczenia, używając wierszy powiązanych z tym wierszem. W tym przypadku over_clause określa sposób podziału wierszy zapytań na grupy w celu przetworzenia przez funkcję okna. Zwróć uwagę, że over_clause można użyć tylko wtedy, gdy nie używasz DISTINCT słowo kluczowe.

Nieprzetworzone dane

Po pierwsze, oto surowe dane, których użyjemy w przykładach na tej stronie:

SELECT Name, District, Population
FROM City
WHERE CountryCode = 'AUS';

Wynik:

+---------------+-----------------+------------+
| Name          | District        | Population |
+---------------+-----------------+------------+
| Sydney        | New South Wales |    3276207 |
| Melbourne     | Victoria        |    2865329 |
| Brisbane      | Queensland      |    1291117 |
| Perth         | West Australia  |    1096829 |
| Adelaide      | South Australia |     978100 |
| Canberra      | Capital Region  |     322723 |
| Gold Coast    | Queensland      |     311932 |
| Newcastle     | New South Wales |     270324 |
| Central Coast | New South Wales |     227657 |
| Wollongong    | New South Wales |     219761 |
| Hobart        | Tasmania        |     126118 |
| Geelong       | Victoria        |     125382 |
| Townsville    | Queensland      |     109914 |
| Cairns        | Queensland      |      92273 |
+---------------+-----------------+------------+

Przykład podstawowy

Jak widać z surowych danych powyżej, niektóre „dzielnice” mają więcej niż jedno miasto, a każde miasto ma inną populację. Możemy użyć AVG() funkcja znajdowania średniej populacji miast w obrębie każdej dzielnicy:

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

Wynik:

+-----------------+--------------------+
| District        | Average Population |
+-----------------+--------------------+
| New South Wales |        998487.2500 |
+-----------------+--------------------+

Widzimy więc, że Nowa Południowa Walia ma średnią populację miasta wynoszącą 998487.2500.

Zaokrąglanie średniej

Zapewne zauważyłeś, że wynik z poprzedniego przykładu był dość precyzyjny – zwracał wynik do czterech miejsc po przecinku. W naszym przypadku to chyba trochę za dużo. Nie potrzebujemy wyniku do czwartego miejsca po przecinku. Dlatego możemy użyć ROUND() funkcja zaokrąglająca go do najbliższej liczby całkowitej (lub do określonej liczby miejsc po przecinku, jeśli sobie tego życzymy).

Oto przykład zaokrąglania wyniku do najbliższej liczby całkowitej:

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

Wynik:

+-----------------+--------------------+
| District        | Average Population |
+-----------------+--------------------+
| New South Wales |             998487 |
+-----------------+--------------------+

Domyślnie ROUND() funkcja zaokrągla do najbliższej liczby całkowitej. Alternatywnie moglibyśmy podać drugi argument, aby określić liczbę miejsc dziesiętnych, ale w tym przypadku tego nie chcemy.

Klauzula GROUP BY

Możemy użyć GROUP BY klauzula o wymienieniu każdego okręgu/stanu wraz z ich średnią populacją miast:

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

Wynik:

+-----------------+--------------------+
| District        | Average Population |
+-----------------+--------------------+
| New South Wales |             998487 |
| Victoria        |            1495356 |
| Queensland      |             451309 |
| West Australia  |            1096829 |
| South Australia |             978100 |
| Capital Region  |             322723 |
| Tasmania        |             126118 |
+-----------------+--------------------+

Klauzula ORDER BY

Możemy również użyć ORDER BY klauzula określająca kolumnę, z którą należy zamawiać według:

SELECT District, ROUND(AVG(Population)) AS 'Average Population'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Average Population`;

Wynik:

+-----------------+--------------------+
| District        | Average Population |
+-----------------+--------------------+
| Tasmania        |             126118 |
| Capital Region  |             322723 |
| Queensland      |             451309 |
| South Australia |             978100 |
| New South Wales |             998487 |
| West Australia  |            1096829 |
| Victoria        |            1495356 |
+-----------------+--------------------+

Zwróć uwagę, że przy zamawianiu za pomocą wielowyrazowego aliasu (np. `Average Population` ), musisz użyć znaku backticka (` ) zamiast apostrofu (' ), aby otoczyć te dwa słowa.

Znajdź średnią długość znaków

AVG() funkcja nie ogranicza się tylko do kolumn z danymi liczbowymi. Możesz także połączyć AVG() z innymi funkcjami, aby znaleźć średnie w innych obszarach.

Na przykład, korzystając z naszych przykładowych danych, możemy znaleźć średnią długość znaków wszystkich wartości w City kolumna:

SELECT ROUND(AVG(CHAR_LENGTH(Name))) AS 'Average Character Length'
FROM city
WHERE CountryCode = 'AUS'
AND District = 'New South Wales';

Wynik:

+--------------------------+
| Average Character Length |
+--------------------------+
|                       10 |
+--------------------------+

Korzystanie z klauzuli OVER

Jak wspomniano, składnia pozwala na OVER klauzulę, którą należy uwzględnić w zapytaniach. Może się to nieco skomplikować, ale zasadniczo OVER klauzula pozwala określić sposób podziału wierszy zapytań na grupy do przetworzenia przez funkcję okna.

Oto przykład:

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

Wynik:

+-----------------+---------------+------------+--------------+
| District        | City          | Population | District Avg |
+-----------------+---------------+------------+--------------+
| Capital Region  | Canberra      |     322723 |       322723 |
| New South Wales | Sydney        |    3276207 |       998487 |
| New South Wales | Wollongong    |     219761 |       998487 |
| New South Wales | Newcastle     |     270324 |       998487 |
| New South Wales | Central Coast |     227657 |       998487 |
| Queensland      | Townsville    |     109914 |       451309 |
| Queensland      | Brisbane      |    1291117 |       451309 |
| Queensland      | Cairns        |      92273 |       451309 |
| Queensland      | Gold Coast    |     311932 |       451309 |
| South Australia | Adelaide      |     978100 |       978100 |
| Tasmania        | Hobart        |     126118 |       126118 |
| Victoria        | Melbourne     |    2865329 |      1495356 |
| Victoria        | Geelong       |     125382 |      1495356 |
| West Australia  | Perth         |    1096829 |      1096829 |
+-----------------+---------------+------------+--------------+

Ten przykład dzieli wiersze według District , podając średnią dla każdej partycji (dzielnicy). Pozwala to zobaczyć bardziej szczegółowe dane, takie jak populacja miasta, wraz ze średnią populacją dzielnicy, do której należy.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ScaleGrid DBaaS rozszerza usługi hostingowe MySQL poprzez AWS Cloud

  2. Jak wybrać nazwę kolumny ze spacją w MySQL?

  3. Kolejność wykonania zapytania / klauzuli MySQL

  4. Zmień i zresetuj hasło roota MySQL

  5. Jak uzyskać najnowszy rekord w każdej grupie za pomocą GROUP BY?