Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk mencari nilai purata dalam mysql

Bagaimana untuk mencari nilai purata dalam mysql

青灯夜游
青灯夜游asal
2021-12-02 11:29:3344189semak imbas

Dalam mysql, anda boleh menggunakan fungsi AVG() untuk mencari purata Fungsi ini boleh mengira purata data lajur yang ditentukan dengan mengira bilangan baris yang dikembalikan dan jumlah setiap baris data sintaks "PILIH AVG (nama_lajur) DARI nama_jadual".

Bagaimana untuk mencari nilai purata dalam mysql

Persekitaran pengendalian tutorial ini: sistem windows7, versi mysql8, komputer Dell G3.

Dalam mysql, anda boleh menggunakan fungsi AVG() untuk mencari purata.

Fungsi MySQL AVG() ialah fungsi agregat yang digunakan untuk mengira purata set nilai atau ungkapan.

Fungsi AVG() boleh mencari purata data lajur yang ditentukan dengan mengira bilangan baris yang dikembalikan dan jumlah setiap baris data. Sintaks fungsi

AVG() adalah seperti berikut:

SELECT AVG(column_name) FROM table_name;

Operator DISTINCT juga boleh ditambah pada fungsi AVG() untuk mengira purata nilai yang berbeza. Contohnya, jika anda mempunyai set nilai 1, 1, 2, 3, fungsi AVG() dengan operasi DISTINCT akan mengembalikan jumlah nilai yang berbeza, iaitu: (1 2 3)/3 = 2.00 .

Contoh MySQL AVG

Kami akan menggunakan jadual products dalam pangkalan data sampel untuk demonstrasi Rajah berikut ialah struktur jadual products -

mysql> desc products;
+--------------------+---------------+------+-----+---------+------------------+
| Field              | Type          | Null | Key | Default | Extra            |
+--------------------+---------------+------+-----+---------+------------------+
| productCode        | varchar(15)   | NO   | PRI |         |                  |
| productName        | varchar(70)   | NO   | MUL | NULL    |                  |
| productLine        | varchar(50)   | NO   | MUL | NULL    |                  |
| productScale       | varchar(10)   | NO   |     | NULL    |                  |
| productVendor      | varchar(50)   | NO   |     | NULL    |                  |
| productDescription | text          | NO   |     | NULL    |                  |
| quantityInStock    | smallint(6)   | NO   |     | NULL    |                  |
| buyPrice           | decimal(10,2) | NO   |     | NULL    |                  |
| MSRP               | decimal(10,2) | NO   |     | NULL    |                  |
| stockValue         | double        | YES  |     | NULL    | STORED GENERATED |
+--------------------+---------------+------+-----+---------+------------------+
10 rows in set

untuk dikira productsHarga purata semua produk dalam jadual boleh disoal menggunakan fungsi AVG seperti berikut:

SELECT AVG(buyprice) 'Avarage Price' FROM products;

Laksanakan pernyataan pertanyaan di atas dan dapatkan keputusan berikut -

mysql> SELECT AVG(buyprice) 'Avarage Price' FROM products;
+---------------+
| Avarage Price |
+---------------+
| 54.395182     |
+---------------+
1 row in set

Sila ambil perhatian bahawa digunakan untuk memformat nilai purata yang dikembalikan oleh fungsi FORMAT. AVG

Anda boleh menambah klausa

pada pernyataan SELECT untuk mengira purata subset nilai. Contohnya, untuk mengira harga purata produk dengan barisan produk WHERE, anda boleh menggunakan pertanyaan berikut: Classic Cars

SELECT AVG(buyprice) 'Avarage Classic Cars Price'
FROM products
WHERE productline = 'Classic Cars';
Laksanakan pernyataan pertanyaan di atas dan dapatkan keputusan berikut -

mysql> SELECT AVG(buyprice) 'Avarage Classic Cars Price'
FROM products
WHERE productline = 'Classic Cars';
+----------------------------+
| Avarage Classic Cars Price |
+----------------------------+
| 64.446316                  |
+----------------------------+
1 row in set

Fungsi MySQL AVG() dengan DISTINCT

Sesetengah produk mempunyai harga yang sama, anda boleh menggunakan pertanyaan berikut untuk menyemaknya:

SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;
Laksanakan pernyataan pertanyaan di atas dan dapatkan keputusan berikut -

mysql> SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products;
+--------------------------------------------+
| COUNT(buyprice) - COUNT(DISTINCT buyprice) |
+--------------------------------------------+
|                                          2 |
+--------------------------------------------+
1 row in set
Anda boleh menggunakan fungsi AVG() untuk mengira purata harga yang berbeza dengan menambah operator

, seperti ditunjukkan di bawah: DISTINCT

SELECT AVG(DISTINCT buyprice) FROM products;
Laksanakan pernyataan pertanyaan di atas dan dapatkan Keputusan berikut -

mysql> SELECT AVG(DISTINCT buyprice) FROM products;
+------------------------+
| AVG(DISTINCT buyprice) |
+------------------------+
| 54.372870              |
+------------------------+
1 row in set
Hasilnya berbeza sedikit daripada harga purata menggunakan operator

. DISTINCT

MySQL AVG dengan klausa GROUP BY

Kami sering menggunakan fungsi AVG bersama dengan klausa

untuk mengira purata setiap kumpulan baris dalam jadual. GROUP BY

Sebagai contoh, untuk mengira harga purata produk bagi setiap barisan produk, anda akan menggunakan fungsi AVG dengan klausa

, seperti berikut: GROUP BY

SELECT productline,
       AVG(buyprice) 'Avarage Price'
FROM products
GROUP BY productline;
Lakukan pertanyaan di atas penyata dan dapatkan hasil berikut -

mysql> SELECT productline,
       AVG(buyprice) 'Avarage Price'
FROM products
GROUP BY productline;
+------------------+---------------+
| productline      | Avarage Price |
+------------------+---------------+
| Classic Cars     | 64.446316     |
| Motorcycles      | 50.685385     |
| Planes           | 49.629167     |
| Ships            | 47.007778     |
| Trains           | 43.923333     |
| Trucks and Buses | 56.329091     |
| Vintage Cars     | 46.066250     |
+------------------+---------------+
7 rows in set

MySQL AVG dengan klausa HAVING

Anda boleh menggunakan klausa

dalam fungsi AVG untuk mengumpulkan syarat tetapan Purata . Contohnya, jika anda ingin memilih hanya barisan produk yang purata harga produknya lebih besar daripada HAVING, anda boleh menggunakan pertanyaan berikut: 50

SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;
Laksanakan pernyataan pertanyaan di atas dan dapatkan hasil berikut-

mysql> SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;
+------------------+---------------+
| productline      | Avarage Price |
+------------------+---------------+
| Classic Cars     | 64.446316     |
| Motorcycles      | 50.685385     |
| Trucks and Buses | 56.329091     |
+------------------+---------------+
3 rows in set

Fungsi dan subqueries MySQL AVG()

Anda boleh menggunakan fungsi AVG() beberapa kali dalam pernyataan SQL untuk mengira purata set purata . Sebagai contoh, purata harga pembelian barisan produk boleh dikira seperti berikut:

SELECT AVG(pl_avg) 'Average Product'
FROM (
    SELECT AVG(buyprice) pl_avg
    FROM products
    GROUP BY productline
) avgs;
Lakukan pernyataan pertanyaan di atas dan dapatkan hasil berikut-

mysql> SELECT AVG(pl_avg) 'Average Product'
FROM (
    SELECT AVG(buyprice) pl_avg
    FROM products
    GROUP BY productline
) avgs;
+-----------------+
| Average Product |
+-----------------+
| 51.1553314286   |
+-----------------+
1 row in set
Cara ia berfungsi-

  • Subquery mengira purata harga pembelian berdasarkan barisan produk.
  • Pertanyaan luar mengira purata harga pembelian bagi barisan produk yang dikembalikan daripada subkueri.

Fungsi MySQL AVG dengan nilai NULL

Fungsi AVG() mengabaikan nilai

dalam pengiraan, lihat contoh berikut: NULL

Pertama , buat jadual baharu bernama dengan dua lajur t dan id, lajur val boleh mengandungi nilai val. NULL

CREATE TABLE IF NOT EXISTS t(
    id  int auto_increment primary key,
    val int
);

Kedua , masukkan beberapa baris dalam jadual , termasuk nilai t. NULL

INSERT INTO t(val)
VALUES(1),(2),(nulL),(3);

Ketiga , gunakan fungsi untuk mengira nilai purata nilai dalam lajur AVG(): val

SELECT AVG(val) FROM t;
Laksanakan pernyataan pertanyaan di atas dan dapatkan Keputusan berikut -

mysql> SELECT AVG(val) FROM t;
+----------+
| AVG(val) |
+----------+
| 2.0000   |
+----------+
1 row in set
Penyataan ini mengembalikan

seperti yang dijangkakan kerana nilai 2 tidak termasuk dalam pengiraan fungsi AVG. NULL

MySQL AVG dengan fungsi aliran kawalan

Untuk mengira purata lajur dan mengira secara bersyarat purata lajur yang sama dalam satu penyata, anda boleh menggunakan fungsi AVG untuk fungsi aliran kawalan (seperti

, IF, CASE, IFNULL, dsb.). NULLIF

Sebagai contoh, untuk mengira nisbah harga purata barisan produk

kepada harga purata semua produk, sila gunakan pernyataan berikut: Classic Cars

SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products'
FROM products;
Laksanakan perkara di atas pernyataan pertanyaan dan dapatkan hasil berikut -

mysql> SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products'
FROM products;
+------------------------+
| Classic Cars/ Products |
+------------------------+
| 1.1847798580           |
+------------------------+
1 row in set
Ungkapan

mengembalikan harga jika barisan produk ialah Classic Cars, jika tidak, ia mengembalikan IF(productline='Classic Cars',buyprice,NULL). NULL

Oleh kerana fungsi AVG mengabaikan nilai NULL dalam pengiraan, ungkapan AVG(IF(productline ='Classic Cars',buyprice,NULL)) hanya mengira harga purata produk yang barisan produknya Classic Cars.

[Cadangan berkaitan: tutorial video mysql]

Atas ialah kandungan terperinci Bagaimana untuk mencari nilai purata dalam mysql. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn