Maison > Article > base de données > Comment trouver la valeur moyenne dans MySQL
Dans MySQL, vous pouvez utiliser la fonction AVG() pour trouver la moyenne. Cette fonction peut calculer la moyenne des données de colonne spécifiées en calculant le nombre de lignes renvoyées et la somme de chaque ligne de données ; (nom_colonne) FROM" nom_table".
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Dans MySQL, vous pouvez utiliser la fonction AVG() pour trouver la moyenne.
La fonction MySQL AVG() est une fonction d'agrégation utilisée pour calculer la moyenne d'un ensemble de valeurs ou d'expressions.
La fonction AVG() peut trouver la moyenne des données de colonne spécifiées en calculant le nombre de lignes renvoyées et la somme de chaque ligne de données. La syntaxe de la fonction
AVG() est la suivante :
SELECT AVG(column_name) FROM table_name;
L'opérateur DISTINCT peut également être ajouté à la fonction AVG() pour calculer la moyenne de différentes valeurs. Par exemple, si vous disposez d'un ensemble de valeurs 1
, 1
, 2
, 3
, AVG( ) avec opération DISTINCT La fonction renverra la somme de différentes valeurs, soit : (1 + 2 + 3)/3 = 2.00
. 1
、1
、2
、3
,具有DISTINCT操作的AVG()函数将返回不同值的和,即:(1 + 2 + 3)/3 = 2.00
。
我们将在示例数据库中使用products
表进行演示,下图是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
要计算products
表中所有产品的平均价格,可以使用AVG函数,如下查询:
SELECT AVG(buyprice) 'Avarage Price' FROM products;
执行上面查询语句,得到以下结果 -
mysql> SELECT AVG(buyprice) 'Avarage Price' FROM products; +---------------+ | Avarage Price | +---------------+ | 54.395182 | +---------------+ 1 row in set
请注意,FORMAT
函数用于格式化AVG
函数返回的平均值。
您可以向SELECT
语句添加一个WHERE
子句来计算子集值的平均值。 例如,要计算产品线为Classic Cars
的产品的平均价格,您可以使用以下查询:
SELECT AVG(buyprice) 'Avarage Classic Cars Price' FROM products WHERE productline = 'Classic Cars';
执行上面查询语句,得到以下结果 -
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;
执行上面查询语句,得到以下结果 -
mysql> SELECT COUNT(buyprice) - COUNT(DISTINCT buyprice) FROM products; +--------------------------------------------+ | COUNT(buyprice) - COUNT(DISTINCT buyprice) | +--------------------------------------------+ | 2 | +--------------------------------------------+ 1 row in set
可以使用AVG()函数通过添加DISTINCT
运算符来计算不同价格的平均值,如下所示:
SELECT AVG(DISTINCT buyprice) FROM products;
执行上面查询语句,得到以下结果 -
mysql> SELECT AVG(DISTINCT buyprice) FROM products; +------------------------+ | AVG(DISTINCT buyprice) | +------------------------+ | 54.372870 | +------------------------+ 1 row in set
结果与使用DISTINCT
操作符的平均价格略有不同。
我们经常使用AVG函数与GROUP BY
子句一起计算表中每组行的平均值。
例如,要计算每个产品线的产品的平均价格,您将使用带有GROUP BY
子句的AVG函数,如下查询语句:
SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline;
执行上面查询语句,得到以下结果 -
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
您可以使用AVG函数中的HAVING
子句中为分组的平均值设置条件。 例如,如果要仅选择产品平均价格大于50
的产品线,则可以使用以下查询:
SELECT productline, AVG(buyprice) 'Avarage Price' FROM products GROUP BY productline HAVING AVG(buyprice) > 50;
执行上面查询语句,得到以下结果 -
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
您可以在SQL语句中多次使用AVG()函数来计算一组平均值的平均值。 例如,可以计算产品线平均购买价格的平均买价如下:
SELECT AVG(pl_avg) 'Average Product' FROM ( SELECT AVG(buyprice) pl_avg FROM products GROUP BY productline ) avgs;
执行上面查询语句,得到以下结果 -
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
怎么运行的 -
AVG()函数忽略计算中的NULL
值,请参阅以下示例:
首先,创建一个名为t
的新表,其中有两列id
和val
,val
列可以包含NULL
值。
CREATE TABLE IF NOT EXISTS t( id int auto_increment primary key, val int );
其次,在t
表中插入一些行,包括NULL
值。
INSERT INTO t(val) VALUES(1),(2),(nulL),(3);
第三,使用AVG()
函数计算val
列中值的平均值:
SELECT AVG(val) FROM t;
执行上面查询语句,得到以下结果 -
mysql> SELECT AVG(val) FROM t; +----------+ | AVG(val) | +----------+ | 2.0000 | +----------+ 1 row in set
该语句按预期返回2
,因为在AVG函数的计算中不包括NULL
值。
要计算列的平均值,并在单个语句中有条件地计算相同列的平均值,可以使用具有控制流函数(如IF
,CASE
,IFNULL
,NULLIF
等)的AVG函数。
例如,要计算Classic Cars
产品线的平均价格与所有产品的平均价格的比例,请使用以下声明:
SELECT AVG(IF(productline='Classic Cars',buyprice,NULL)) / AVG(buyprice) 'Classic Cars/ Products' FROM products;
执行上面查询语句,得到以下结果 -
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
如果产品线是Classic Cars
,则IF(productline='Classic Cars',buyprice,NULL)
表达式返回价格,否则返回NULL
products
dans l'exemple de base de données pour la démonstration. L'image ci-dessous représente products. La structure du code> table-🎜rrreee🎜Pour calculer le prix moyen de tous les produits de la table <code>products
, vous pouvez utiliser la fonction AVG, comme indiqué dans la requête suivante : 🎜rrreee🎜 Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants :🎜rrreee🎜 Notez que la fonction FORMAT
est utilisée pour formater la valeur moyenne renvoyée par la fonction AVG
. 🎜🎜Vous pouvez ajouter une clause WHERE
à l'instruction SELECT
pour calculer la moyenne d'un sous-ensemble de valeurs. Par exemple, pour calculer le prix moyen des produits avec la gamme de produits Classic Cars
, vous pouvez utiliser la requête suivante : 🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜rrreeeDISTINCT
, comme indiqué ci-dessous : 🎜rrreee🎜Exécutez la requête ci-dessus et obtenez les résultats suivants -🎜rrreee🎜Résultats et utilisationDISTINCT varient légèrement. 🎜GROUP BY
Ensemble, calculons la moyenne de chaque ensemble de lignes du tableau. 🎜🎜Par exemple, pour calculer le prix moyen des produits dans chaque ligne de produits, vous utiliserez la fonction AVG avec la clause GROUP BY
, comme dans la requête suivante : 🎜rrreee🎜Exécutez la requête ci-dessus et obtenez le résultat suivant - 🎜rrreeeHAVING
dans l'AVG fonction Définir les conditions pour la moyenne du groupe dans . Par exemple, si vous souhaitez sélectionner uniquement les lignes de produits dont le prix moyen est supérieur à 50
, vous pouvez utiliser la requête suivante : 🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜rrreee NULL dans les calculs code>, voir l'exemple suivant : 🎜🎜<em>Tout d'abord</em>, créez une nouvelle table nommée <code>t
avec deux colonnes id
Comme avec val
, les colonnes val
peuvent contenir des valeurs NULL
. 🎜rrreee🎜Deuxièmement, insérez quelques lignes dans la table t
, y compris les valeurs NULL
. 🎜rrreee🎜Troisièmement, utilisez la fonction AVG()
pour calculer la valeur moyenne des valeurs de la colonne val
: 🎜rrreee🎜 Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants - 🎜rrreee🎜Cette instruction renvoie 2
comme prévu car la valeur NULL
n'est pas incluse dans le calcul de la fonction AVG. 🎜IF
, CASE
, IFNULL
, NULLIF
, etc.). 🎜🎜Par exemple, pour calculer le rapport entre le prix moyen de la gamme de produits Classic Cars
et le prix moyen de tous les produits, veuillez utiliser l'instruction suivante : 🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants : 🎜rrreee🎜Si la gamme de produits est Classic Cars
, alors l'expression IF(productline='Classic Cars',buyprice,NULL)
renvoie le prix, sinon, il renvoie NULL
. 🎜Parce que la fonction AVG ignore le prix moyen du NULL
值,所以AVG(IF(productline ='Classic Cars',buyprice,NULL))
表达式只计算产品线是Classic Cars
produit dans le calcul.
【Recommandations associées : tutoriel vidéo mysql】
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!