mysql에서 필드 합계를 구현하는 방법

青灯夜游
풀어 주다: 2022-01-06 14:40:21
원래의
23767명이 탐색했습니다.

mysql에서는 SUM() 함수를 사용하여 필드 합계를 구현할 수 있습니다. 이 함수는 지정된 필드 값의 합계를 반환합니다. 구문은 "SELECT SUM(DISTINCT 표현식) FROM 테이블 이름 [WHERE 절];)"입니다.

mysql에서 필드 합계를 구현하는 방법

이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.

mysql에서는 SUM() 함수를 사용하여 필드 합계를 구현할 수 있습니다.

SUM() 함수는 값 또는 표현식 세트의 합계를 계산하는 데 사용되며 지정된 필드 값의 합계를 반환할 수 있습니다. SUM( ) 함수는 다음과 같습니다. SUM()函数用于计算一组值或表达式的总和,可返回指定字段值的总和,SUM()函数的语法如下:

SUM(DISTINCT expression)
로그인 후 복사

SUM()函数是如何工作的?

  • 如果在没有返回匹配行SELECT语句中使用SUM函数,则SUM函数返回NULL,而不是0
  • DISTINCT运算符允许计算集合中的不同值。
  • SUM函数忽略计算中的NULL值。

MySQL SUM()函数示例

我们来看看示例数据库(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()函数的返回值。

MySQL SUM与GROUP BY子句

当与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
로그인 후 복사

MySQL SUM与HAVING

您可以使用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
로그인 후 복사

MySQL SUM与LIMIT

假设您想要计算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个价格最高的产品的总和。

MySQL SUM与NULL

如果没有匹配的行,则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
로그인 후 복사

MySQL SUM与连接语句

您可以使用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 값을 무시합니다.

MySQL SUM() 함수 예제

샘플 데이터베이스의 orderdetails를 살펴보겠습니다( yiibaidb) >테이블.

다음 쿼리에 표시된 대로 SUM() 함수를 사용하여 주문 번호 10100의 총액을 계산할 수 있습니다. rrreee

위 쿼리 문을 실행합니다. 그리고 다음 결과를 얻습니다-🎜rrreee 🎜FORMAT() 함수는 SUM() 함수의 반환 값 형식을 지정하는 데 사용됩니다. 🎜

🎜GROUP BY 절이 있는 MySQL SUM 🎜

🎜 GROUP BY 절과 결합하면 SUM() 함수는 GROUP BY 절에 지정된 각 그룹의 합계를 계산합니다. 🎜🎜예를 들어 GROUP BY 절과 함께 SUM 함수를 사용하면 아래와 같이 각 주문의 총액을 계산할 수 있습니다. 🎜rrreee🎜위 쿼리를 실행합니다. 문을 실행하고 다음 결과를 얻습니다. - 🎜rrreee

MySQL SUM과 HAVING

🎜 SUM에서 <code>HAVING 절을 사용할 수 있습니다. 함수는 특정 기준에 따라 결과를 필터링합니다. 예를 들어 총 주문 수량을 계산하고 총 금액이 60000보다 큰 주문만 선택할 수 있습니다. 다음 쿼리문 -🎜rrreee🎜위 쿼리문을 실행하여 다음과 같은 결과를 얻습니다. -🎜rrreee

🎜MySQL SUM 및 LIMIT🎜

🎜원한다고 가정해보세요 products 테이블에서 가장 비싼 상위 10개 제품의 합계를 계산하면 다음 쿼리가 요청될 수 있습니다. 🎜rrreee🎜위 쿼리 문을 실행하고 다음 결과를 얻습니다.🎜rrreee🎜작동하지 않습니다. SUM함수의 <code>SELECT 문은 하나의 행만 반환하고 LIMIT 절은 반환할 행 수를 제한하므로 유효하지 않습니다. . 🎜🎜이 문제를 해결하려면 다음 하위 쿼리를 사용하세요. 🎜rrreee🎜위 쿼리 문을 실행하여 다음과 같은 결과를 얻습니다. -🎜rrreee🎜위 문은 어떻게 실행되나요? 🎜
  • 하위 쿼리는 가장 비싼 제품 상위 10개를 선택합니다.
  • 외부 쿼리는 하위 쿼리에서 반환된 가격이 가장 높은 상위 10 제품의 합계를 계산합니다.

🎜MySQL SUM 및 NULL🎜

🎜일치하는 행이 없으면 SUM 함수 NULL 값을 반환합니다. SUM 함수가 NULL 대신 0을 반환하기를 원하는 경우가 있습니다. 이 경우 COALESCE 기능을 사용할 수 있습니다. COALESCE 함수는 두 개의 매개변수를 허용합니다. 첫 번째 매개변수가 NULL이면 두 번째 매개변수를 반환하고, 그렇지 않으면 다음 쿼리 문을 참조하세요. 🎜위 쿼리문을 실행하여 다음과 같은 결과를 얻습니다-🎜rrreee

MySQL SUM 및 연결문

🎜 SELECT JOIN 문의 SUM 함수는 다른 테이블의 값으로 지정된 조건을 기반으로 테이블의 값 합계를 계산합니다. 🎜🎜예를 들어 취소된 총 주문 금액을 계산하려면 다음 문을 사용하세요. 🎜rrreee🎜[관련 권장 사항: 🎜mysql video tutorial🎜]🎜

위 내용은 mysql에서 필드 합계를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!