Maison > Article > base de données > Comment implémenter la sommation des champs dans MySQL
Dans MySQL, vous pouvez utiliser la fonction SUM() pour implémenter la sommation de champ. Cette fonction renvoie la somme des valeurs de champ spécifiées. La syntaxe est "SELECT SUM(DISTINCT expression) FROM table name [WHERE clause];)".
L'environnement d'exploitation de ce tutoriel : système windows7, version mysql8, ordinateur Dell G3.
Dans MySQL, vous pouvez utiliser la fonction SUM() pour implémenter la sommation de champ.
La fonction SUM()
est utilisée pour calculer la somme d'un ensemble de valeurs ou d'expressions et peut renvoyer la somme des valeurs de champ spécifiées. La syntaxe du SUM(. )
est la suivante : SUM()
函数用于计算一组值或表达式的总和,可返回指定字段值的总和,SUM()
函数的语法如下:
SUM(DISTINCT expression)
SUM()
函数是如何工作的?
SELECT
语句中使用SUM
函数,则SUM
函数返回NULL
,而不是0
。DISTINCT
运算符允许计算集合中的不同值。SUM
函数忽略计算中的NULL
值。我们来看看示例数据库(yiibaidb)中的orderdetails
表。
可以使用SUM()
函数来计算订单编号10100
的总金额,如下查询所示:
SELECT FORMAT(SUM(quantityOrdered * priceEach),2) total FROM orderdetails WHERE orderNumber = 10100;
执行上面查询语句,得到以下结果 -
mysql> SELECT FORMAT(SUM(quantityOrdered * priceEach),2) total FROM orderdetails WHERE orderNumber = 10100; +-----------+ | total | +-----------+ | 10,223.83 | +-----------+ 1 row in set
请注意,FORMAT()
函数用于格式化SUM()
函数的返回值。
当与GROUP BY
子句组合时,SUM()
函数计算GROUP BY
子句中指定的每个分组的总和。
例如,可以使用具有GROUP BY
子句的SUM
函数计算每个订单的总金额,如下所示:
SELECT orderNumber, FORMAT(SUM(quantityOrdered * priceEach),2) total FROM orderdetails GROUP BY orderNumber ORDER BY SUM(quantityOrdered * priceEach) DESC;
执行上面查询语句,得到以下结果 -
+-------------+-----------+ | orderNumber | total | +-------------+-----------+ | 10165 | 67,392.85 | | 10287 | 61,402.00 | | 10310 | 61,234.67 | | 10212 | 59,830.55 | *** 此处省略了一大波数据 ***** | 10116 | 1,627.56 | | 10158 | 1,491.38 | | 10144 | 1,128.20 | | 10408 | 615.45 | +-------------+-----------+ 327 rows in set
您可以使用HAVING
子句中在SUM
函数中来根据特定条件过滤结果。例如,您可以计算总订单量,只能选择总金额大于60000
的订单。如下查询语句 -
SELECT orderNumber, FORMAT(SUM(quantityOrdered * priceEach),2) FROM orderdetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000 ORDER BY SUM(quantityOrdered * priceEach);
执行上面查询语句,得到以下结果 -
mysql> SELECT orderNumber, FORMAT(SUM(quantityOrdered * priceEach),2) FROM orderdetails GROUP BY orderNumber HAVING SUM(quantityOrdered * priceEach) > 60000 ORDER BY SUM(quantityOrdered * priceEach); +-------------+--------------------------------------------+ | orderNumber | FORMAT(SUM(quantityOrdered * priceEach),2) | +-------------+--------------------------------------------+ | 10310 | 61,234.67 | | 10287 | 61,402.00 | | 10165 | 67,392.85 | +-------------+--------------------------------------------+ 3 rows in set
假设您想要计算products
表中前十名最昂贵的产品的总和,可以提出以下查询:
SELECT SUM(buyprice) FROM products ORDER BY buyprice DESC LIMIT 10;
执行上面查询语句,得到以下结果 -
mysql> SELECT SUM(buyprice) FROM products ORDER BY buyprice DESC LIMIT 10; +---------------+ | SUM(buyprice) | +---------------+ | 5983.47 | +---------------+ 1 row in set
它不起作用,因为具有SUM
函数的SELECT
语句只返回一行,LIMIT
子句约束要返回的行数无效。
要解决此问题,请使用以下子查询:
SELECT FORMAT(SUM(buyprice),2) FROM (SELECT buyprice FROM products ORDER BY buyprice DESC LIMIT 10) price;
执行上面查询语句,得到以下结果 -
+-------------------------+ | FORMAT(SUM(buyprice),2) | +-------------------------+ | 958.71 | +-------------------------+ 1 row in set
上面语句是怎么运行的?
10
个价格最高的产品的总和。如果没有匹配的行,则SUM
函数返回NULL
值。 有时,您希望SUM
函数返回0
而不是NULL
。 在这种情况下,可以使用COALESCE
函数。COALESCE
函数接受两个参数,如果第一个参数为NULL
,则返回第二个参数,否则返回第一个参数; 参考以下查询语句:
SELECT COALESCE(SUM(quantityOrdered * priceEach),0) FROM orderdetails WHERE productCode = 'S1_212121';
执行上面查询语句,得到以下结果 -
mysql> SELECT COALESCE(SUM(quantityOrdered * priceEach),0) FROM orderdetails WHERE productCode = 'S1_212121'; +----------------------------------------------+ | COALESCE(SUM(quantityOrdered * priceEach),0) | +----------------------------------------------+ | 0.00 | +----------------------------------------------+ 1 row in set
您可以使用SELECT
JOIN
语句中的SUM
SELECT FORMAT(SUM(quantityOrdered * priceEach),2) loss FROM orderdetails INNER JOIN orders USING(orderNumber) WHERE status = 'Cancelled'Comment fonctionne la fonction
SUM()
?
SUM
est utilisée dans une instruction SELECT
qui ne renvoie pas de lignes correspondantes, la fonction SUM
renvoie NULL, pas 0
. DISTINCT
permet le calcul de valeurs distinctes dans un ensemble. SUM
ignore les valeurs NULL
dans les calculs. orderdetails
dans l'exemple de base de données ( yiibaidb) >Tableau. Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants-🎜rrreee 🎜Veuillez noter que la fonction FORMAT()
est utilisée pour formater la valeur de retour de la fonction SUM()
. 🎜GROUP BY
, SUM()
calcule la somme de chaque groupe spécifié dans la clause GROUP BY
. 🎜🎜Par exemple, vous pouvez utiliser la fonction SUM
avec la clause GROUP BY
pour calculer le montant total de chaque commande, comme suit : 🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez le résultat suivant - 🎜rrreeeHAVING
dans SUM fonction pour filtrer les résultats en fonction de critères spécifiques. Par exemple, vous pouvez calculer la quantité totale de la commande et sélectionner uniquement les commandes dont le montant total est supérieur à <code>60 000
. L'instruction de requête suivante -🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜rrreeeLa somme des dix produits les plus chers dans le tableau des produits
, la requête suivante peut être posée : 🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜rrreee🎜Cela ne fonctionne pas car avec SUMSELECT
de la fonction /code> ne renvoie qu'une seule ligne, et la clause LIMIT
restreint le nombre de lignes à renvoyer et n'est pas valide . 🎜🎜Pour résoudre ce problème, veuillez utiliser la sous-requête suivante : 🎜rrreee🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜rrreee🎜Comment l'instruction ci-dessus s'exécute-t-elle ? 🎜10
principaux produits avec les prix les plus élevés renvoyés par la sous-requête. SUM
renvoie la valeur NULL
. Parfois, vous souhaitez que la fonction SUM
renvoie 0
au lieu de NULL
. Dans ce cas, la fonction COALESCE
peut être utilisée. La fonction COALESCE
accepte deux paramètres. Si le premier paramètre est NULL
, elle renvoie le deuxième paramètre, sinon elle renvoie le premier paramètre : 🎜rrreee ; 🎜Exécutez l'instruction de requête ci-dessus et obtenez les résultats suivants -🎜rrreeeSELECT
JOIN La fonction <code>SUM
dans une instruction calcule la somme des valeurs d'une table en fonction des conditions spécifiées par les valeurs d'une autre table. 🎜🎜Par exemple, pour calculer le montant total des commandes annulées, utilisez l'instruction suivante : 🎜rrreee🎜[Recommandation associée : 🎜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!