mysql에서는 SUM() 함수를 사용하여 필드 합계를 구현할 수 있습니다. 이 함수는 지정된 필드 값의 합계를 반환합니다. 구문은 "SELECT SUM(DISTINCT 표현식) FROM 테이블 이름 [WHERE 절];)"입니다.
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
mysql에서는 SUM() 함수를 사용하여 필드 합계를 구현할 수 있습니다.
SUM()
함수는 값 또는 표현식 세트의 합계를 계산하는 데 사용되며 지정된 필드 값의 합계를 반환할 수 있습니다. SUM( )
함수는 다음과 같습니다. 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'
SUM()
함수는 어떻게 작동하나요?
SELECT
문에서 SUM
함수를 사용하는 경우 SUM
함수는 NULL, 0
이 아닙니다. DISTINCT
연산자를 사용하면 컬렉션의 고유한 값을 계산할 수 있습니다. SUM
함수는 계산 시 NULL
값을 무시합니다. orderdetails
를 살펴보겠습니다( yiibaidb) >테이블. 다음 쿼리에 표시된 대로 SUM()
함수를 사용하여 주문 번호 10100
의 총액을 계산할 수 있습니다. rrreee
FORMAT()
함수는 SUM()
함수의 반환 값 형식을 지정하는 데 사용됩니다. 🎜GROUP BY
절과 결합하면 SUM()
함수는 GROUP BY
절에 지정된 각 그룹의 합계를 계산합니다. 🎜🎜예를 들어 GROUP BY
절과 함께 SUM
함수를 사용하면 아래와 같이 각 주문의 총액을 계산할 수 있습니다. 🎜rrreee🎜위 쿼리를 실행합니다. 문을 실행하고 다음 결과를 얻습니다. - 🎜rrreeeSUM에서 <code>HAVING
절을 사용할 수 있습니다. 함수는 특정 기준에 따라 결과를 필터링합니다. 예를 들어 총 주문 수량을 계산하고 총 금액이 60000
보다 큰 주문만 선택할 수 있습니다. 다음 쿼리문 -🎜rrreee🎜위 쿼리문을 실행하여 다음과 같은 결과를 얻습니다. -🎜rrreeeproducts
테이블에서 가장 비싼 상위 10개 제품의 합계를 계산하면 다음 쿼리가 요청될 수 있습니다. 🎜rrreee🎜위 쿼리 문을 실행하고 다음 결과를 얻습니다.🎜rrreee🎜작동하지 않습니다. SUM함수의 <code>SELECT
문은 하나의 행만 반환하고 LIMIT
절은 반환할 행 수를 제한하므로 유효하지 않습니다. . 🎜🎜이 문제를 해결하려면 다음 하위 쿼리를 사용하세요. 🎜rrreee🎜위 쿼리 문을 실행하여 다음과 같은 결과를 얻습니다. -🎜rrreee🎜위 문은 어떻게 실행되나요? 🎜10
제품의 합계를 계산합니다. SUM
함수 NULL
값을 반환합니다. SUM
함수가 NULL
대신 0
을 반환하기를 원하는 경우가 있습니다. 이 경우 COALESCE
기능을 사용할 수 있습니다. COALESCE
함수는 두 개의 매개변수를 허용합니다. 첫 번째 매개변수가 NULL
이면 두 번째 매개변수를 반환하고, 그렇지 않으면 다음 쿼리 문을 참조하세요. 🎜위 쿼리문을 실행하여 다음과 같은 결과를 얻습니다-🎜rrreeeSELECT
JOIN
문의 SUM
함수는 다른 테이블의 값으로 지정된 조건을 기반으로 테이블의 값 합계를 계산합니다. 🎜🎜예를 들어 취소된 총 주문 금액을 계산하려면 다음 문을 사용하세요. 🎜rrreee🎜[관련 권장 사항: 🎜mysql video tutorial🎜]🎜위 내용은 mysql에서 필드 합계를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!