Rumah > Artikel > pangkalan data > Bagaimana untuk mencari nilai purata dalam mysql
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".
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
.
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 products
Harga 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
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
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 setAnda 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 setHasilnya berbeza sedikit daripada harga purata menggunakan operator
. DISTINCT
untuk mengira purata setiap kumpulan baris dalam jadual. GROUP BY
, 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
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
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 setCara ia berfungsi-
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 setPenyataan ini mengembalikan
seperti yang dijangkakan kerana nilai 2
tidak termasuk dalam pengiraan fungsi AVG. NULL
, IF
, CASE
, IFNULL
, dsb.). NULLIF
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 setUngkapan
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!