Saat menggunakan MySQL, Anda dapat menggunakan AVG()
berfungsi untuk menghitung nilai rata-rata dari rentang nilai.
Misalnya, Anda dapat menggunakan fungsi ini untuk mencari tahu berapa rata-rata populasi kota untuk negara atau negara bagian tertentu. Mengingat suatu negara akan memiliki banyak kota, masing-masing dengan populasi yang berbeda, Anda dapat mengetahui berapa rata-rata di antara mereka. Satu kota mungkin memiliki populasi katakanlah, 50.000 sementara yang lain memiliki populasi 500.000. AVG()
fungsi akan menghitung rata-rata untuk Anda.
Sintaks
Sintaks AVG()
seperti ini:
AVG([DISTINCT] expr) [over_clause]
Dimana expr
adalah ekspresi yang Anda inginkan rata-ratanya.
over_clause
adalah klausa opsional yang bekerja dengan fungsi jendela. Cara kerja fungsi jendela adalah, untuk setiap baris dari kueri, melakukan penghitungan menggunakan baris yang terkait dengan baris tersebut. Dalam hal ini, over_clause
menentukan cara mempartisi baris kueri ke dalam grup untuk diproses oleh fungsi jendela. Perhatikan bahwa over_clause
hanya dapat digunakan jika Anda tidak menggunakan DISTINCT
kata kunci.
Data Mentah
Pertama, inilah data mentah yang akan kita gunakan untuk contoh di halaman ini:
SELECT Name, District, Population FROM City WHERE CountryCode = 'AUS';
Hasil:
+---------------+-----------------+------------+ | 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 | +---------------+-----------------+------------+
Contoh Dasar
Seperti yang Anda lihat dari data mentah di atas, beberapa “Distrik” memiliki lebih dari satu kota, dan setiap kota memiliki populasi yang berbeda. Kita dapat menggunakan AVG()
fungsi untuk mencari rata-rata penduduk kota-kota dalam setiap kabupaten:
SELECT District, AVG(Population) AS 'Average Population' FROM City WHERE CountryCode = 'AUS' AND District = 'New South Wales';
Hasil:
+-----------------+--------------------+ | District | Average Population | +-----------------+--------------------+ | New South Wales | 998487.2500 | +-----------------+--------------------+
Jadi kita dapat melihat bahwa New South Wales memiliki populasi kota rata-rata 998487.2500.
Membulatkan Rata-Rata
Anda mungkin memperhatikan bahwa hasil dari contoh sebelumnya cukup tepat – ia mengembalikan hasil ke empat tempat desimal. Dalam kasus kami, ini mungkin terlalu berlebihan. Kami tidak membutuhkan hasil ke tempat desimal keempat. Oleh karena itu, kita dapat menggunakan ROUND()
berfungsi untuk membulatkannya ke bilangan bulat terdekat (atau ke bilangan desimal tertentu jika diinginkan).
Berikut ini contoh pembulatan hasil ke bilangan bulat terdekat:
SELECT District, ROUND(AVG(Population)) AS 'Average Population' FROM City WHERE CountryCode = 'AUS' AND District = 'New South Wales';
Hasil:
+-----------------+--------------------+ | District | Average Population | +-----------------+--------------------+ | New South Wales | 998487 | +-----------------+--------------------+
Secara default, ROUND()
fungsi membulatkan ke bilangan bulat terdekat. Sebagai alternatif, kami dapat memberikan argumen ke-2 untuk menentukan sejumlah tempat desimal, tetapi dalam kasus ini, kami tidak menginginkannya.
GROUP BY Clause
Kita dapat menggunakan GROUP BY
klausul untuk mencantumkan setiap kabupaten/negara bagian, bersama dengan rata-rata populasi kotanya:
SELECT District, ROUND(AVG(Population)) AS 'Average Population' FROM City WHERE CountryCode = 'AUS' GROUP BY District;
Hasil:
+-----------------+--------------------+ | District | Average Population | +-----------------+--------------------+ | New South Wales | 998487 | | Victoria | 1495356 | | Queensland | 451309 | | West Australia | 1096829 | | South Australia | 978100 | | Capital Region | 322723 | | Tasmania | 126118 | +-----------------+--------------------+
Klausul ORDER BY
Kami juga dapat menggunakan ORDER BY
klausa untuk menentukan kolom yang akan dipesan dengan:
SELECT District, ROUND(AVG(Population)) AS 'Average Population' FROM City WHERE CountryCode = 'AUS' GROUP BY District ORDER BY `Average Population`;
Hasil:
+-----------------+--------------------+ | District | Average Population | +-----------------+--------------------+ | Tasmania | 126118 | | Capital Region | 322723 | | Queensland | 451309 | | South Australia | 978100 | | New South Wales | 998487 | | West Australia | 1096829 | | Victoria | 1495356 | +-----------------+--------------------+
Perhatikan bahwa, saat memesan dengan alias multi-kata (seperti `Average Population`
), Anda harus menggunakan karakter backtick (`
) sebagai ganti apostrof ('
) untuk mengelilingi dua kata.
Temukan Panjang Karakter Rata-rata
AVG()
fungsinya tidak terbatas hanya pada kolom dengan data numerik. Anda juga dapat menggabungkan AVG()
dengan fungsi lain untuk menemukan rata-rata di area lain.
Misalnya, dengan menggunakan data sampel kami, kami dapat menemukan panjang karakter rata-rata dari semua nilai di City
kolom:
SELECT ROUND(AVG(CHAR_LENGTH(Name))) AS 'Average Character Length' FROM city WHERE CountryCode = 'AUS' AND District = 'New South Wales';
Hasil:
+--------------------------+ | Average Character Length | +--------------------------+ | 10 | +--------------------------+
Menggunakan Klausa OVER
Seperti disebutkan, sintaks memungkinkan untuk OVER
klausa untuk disertakan dalam kueri Anda. Ini bisa menjadi sedikit rumit, tetapi pada dasarnya, OVER
klausa memungkinkan Anda untuk menentukan cara mempartisi baris kueri ke dalam grup untuk diproses oleh fungsi jendela.
Ini contohnya:
SELECT District, Name AS City, Population, ROUND(AVG(Population) OVER(PARTITION BY District)) AS 'District Avg' FROM City WHERE CountryCode = 'AUS' ORDER BY District;
Hasil:
+-----------------+---------------+------------+--------------+ | 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 | +-----------------+---------------+------------+--------------+
Contoh ini mempartisi baris dengan District
, memberikan rata-rata untuk setiap partisi (distrik). Ini memungkinkan Anda melihat data yang lebih terperinci, seperti populasi kota, bersama dengan populasi rata-rata untuk distrik tempat kota tersebut berada.