CodeGym /Kursy /SQL SELF /Średnie wartości z AVG() — obliczanie średn...

Średnie wartości z AVG() — obliczanie średnich wartości w kolumnach

SQL SELF
Poziom 7 , Lekcja 3
Dostępny

Jeśli kiedykolwiek próbowałeś policzyć średnią ocenę z egzaminów albo np. średnią pensję w dziale, to już znasz pojęcie średniej arytmetycznej. W sumie tego uczą już w szkole. W SQL każde zadanie związane z obliczaniem średniej w zbiorze danych ogarniasz funkcją AVG().

Funkcja AVG() to funkcja agregująca, która liczy średnią arytmetyczną dla kolumny numerycznej. Sumuje wszystkie wartości w podanej kolumnie i dzieli przez ich ilość. Ignoruje NULL (i to ignorowanie, co ciekawe, ułatwia życie, ale o tym za chwilę).

Składnia AVG()

Zacznijmy od podstawowej składni:

SELECT AVG(kolumna)
FROM tabela;

Zwróć uwagę: tutaj kolumna to kolumna z wartościami numerycznymi, dla których chcesz znaleźć średnią.

Przykład 1: Średnia pensja pracowników

Wyobraź sobie, że mamy tabelę employees, gdzie są dane o pracownikach i ich pensjach:

id name salary
1 Otto 50000
2 Maria 60000
3 Alex 55000
4 Anna NULL
5 Dan 52000

Proste zapytanie do policzenia średniej pensji:

SELECT AVG(salary) AS average_salary
FROM employees;

Wynik:

average_salary
54250

Jak to działa?

  • AVG() sumuje wszystkie pensje: 50000 + 60000 + 55000 + 52000 = 217000.
  • Dzieli sumę przez ilość nie-NULL wartości: 217000 / 4 = 54250.

Jak AVG() działa z NULL

Pewnie zauważyłeś, że przy liczeniu średniej pensji wartość NULL w kolumnie salary została zignorowana. To kluczowa cecha AVG(). Bierze pod uwagę tylko nie-NULL wartości.

Spróbujmy przykład:

SELECT AVG(NULL) AS result;

Wynik:

result
NULL

To jeszcze raz pokazuje, że AVG() ignoruje NULL. Ale jeśli cały zbiór danych to NULL, wynik będzie NULL.

Ale jeśli w tabeli zamiast NULL będzie 0, taki wynik nie zostanie zignorowany.

Tabela employees

id salary
1 1000
2 0
3 NULL
4 2000

Zapytanie SQL:

SELECT AVG(salary) AS avg_salary
FROM employees;

Wynik:

avg_salary
1000

Dlaczego tak?

Bo AVG() policzy:

[(1000 + 0 + 2000) / 3 = 1000]

Wiersz z NULL jest ignorowany przy liczeniu średniej.

Przykład: Liczenie średniego wieku studentów

Teraz spójrzmy na tabelę students:

id name age
1 Anna 20
2 Max 22
3 Maria NULL
4 Otto 21

Zapytanie:

SELECT AVG(age) AS average_age
FROM students;

Wynik:

average_age
21
  • AVG() ignoruje studentkę Maria, bo jej wiek to NULL.
  • Średnia liczona jest tak: (20 + 22 + 21) / 3 = 21.

Zaokrąglanie wyniku

Czasem wynik AVG() to liczba z kilkoma miejscami po przecinku.

Jeśli chcesz dostać zaokrągloną liczbę, użyj funkcji ROUND().

Tabela employees

id salary
1 50000
2 60000
3 47000
4 NULL

Zapytanie SQL

SELECT ROUND(AVG(salary), 2) AS rounded_average_salary
FROM employees;

Wynik

rounded_average_salary
52333.33

Wiersz z NULL jest pomijany, więc średnia liczona jest z trzech wartości.

Filtrowanie danych przed liczeniem AVG()

Jeśli chcesz policzyć średnią tylko dla wartości spełniających jakieś warunki, użyj WHERE.

Tabela employees

id salary
1 50000
2 60000
3 47000
4 60000
5 NULL

Przykład: Znajdźmy średnią pensję pracowników, których id > 2.

SELECT AVG(salary) AS average_salary
FROM employees
WHERE id > 2;

Wynik

average_salary
53500

W liczeniu biorą udział tylko pensje z id = 3 i id = 4. Wiersz z NULL jest pomijany.

Przykład: Złożone zapytania z AVG()

Możesz łączyć funkcję AVG() z innymi funkcjami agregującymi i operatorami.

Załóżmy, że mamy tabelę sprzedaży sales:

sale_id product quantity price
1 Telefon 2 500
2 Laptop 1 1500
3 Tablet 3 300

Zapytanie do policzenia średniej całkowitej wartości sprzedaży:

SELECT AVG(quantity * price) AS average_total_sale
FROM sales;

Wynik:

averagetotalsale
950

Życiowe tipy i typowe błędy

Praca z AVG() wymaga ostrożności, żeby nie popełnić typowych błędów:

NULL-wartości: czasem dziwi, czemu wynik jest mniejszy niż się spodziewasz. Pamiętaj, że AVG() pomija wiersze z NULL.

Mieszanie typów danych: jeśli w kolumnie są liczby i tekst (co samo w sobie jest słabą praktyką), AVG() wywali błąd.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION