亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何在MySQL中使用sum函數

發布時間:2021-03-18 15:24:03 來源:億速云 閱讀:268 作者:Leah 欄目:開發技術

這篇文章將為大家詳細講解有關如何在MySQL中使用sum函數,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

語法分析

SUM([DISTINCT] expr) [over_clause]

  • Returns the sum of expr. If the return set has no rows, SUM() returns NULL. The DISTINCT keyword can be used to sum only the distinct values of expr.

  • If there are no matching rows, SUM() returns NULL.

  • This function executes as a window function if over_clause is present.

上面幾句是MySQL官方文檔的一個功能描述。這里翻譯一下大致的意思是什么。

  • 返回expr表達式的和。如果沒有返回行數,則返回NULL。這里的DISTINCT是為了去掉表達式expr中的重復值。

  • 如果沒有匹配到行,該函數也返回NULL。

  • 如果設置了over_clause,則該函數作為窗口函數執行。對窗口函數不熟悉的,可以去了解一下MySQL中的窗口函數。

函數解釋

在使用該函數時,我們應該思考一下,該函數是如何統計表達式中的和呢?可能有的程序員會想,這個函數直接去統計滿足條件中所有行的總和。這么理解其實也沒錯,只是表達的不是很準確或者他不夠真實了解運行原理。
實際上該函數是根據匹配行的值,一個一個累加起來的。這里舉個例子,在一個訂單表中滿足條件的有10行數據,我們需要統計訂單中的總價,sum的初始值是0,在匹配到第一行時,訂單價格是10,此時sum就變成10,匹配到第二行,訂單價格是20,這時候sum就是30。第三行訂單價格是50,這時候sum就是80。按照這種方式依次累加。

行數訂單價格sum值
第一行10.0010.00
第二行20.0030.00
第三行30.0060.00
第四行40.00100.00
第五行50.00150.00
第...行......
第十行100.00550.00

實例演示

假設有下面一張表(Delivery),表結構如下:

+-----------------------------+---------+
| Column Name   | Type |
+-----------------------------+---------+
| delivery_id   | int |
| customer_id   | int |
| order_date   | date |
| customer_pref_delivery_date | date |
| order_money   | decimal |
+-----------------------------+---------+

delivery_id 是表的主鍵。

該表保存著顧客的食物配送信息,顧客在某個日期下了訂單,并指定了一個期望的配送日期(和下單日期相同或者在那之后)。如果顧客期望的配送日期和下單日期相同,則該訂單稱為 「即時訂單」,否則稱為「計劃訂單」。
里面有如下數據:

+-------------+-------------+------------+-----------------------------+-------------+
| delivery_id | customer_id | order_date | customer_pref_delivery_date | order_money |
+-------------+-------------+------------+-----------------------------+-------------+
| 1  | 1  | 2019-08-01 | 2019-08-02   | 1.23 |
| 2  | 5  | 2019-08-02 | 2019-08-02   | 1.01 |
| 3  | 1  | 2019-08-11 | 2019-08-11   | 1.09 |
| 4  | 3  | 2019-08-24 | 2019-08-26   | 1.00 |
| 5  | 4  | 2019-08-21 | 2019-08-22   | 10.00 |
| 6  | 2  | 2019-08-11 | 2019-08-13   | 12.09 |
+-------------+-------------+------------+-----------------------------+-------------+

實例一

統計出該表中所有的訂單總金額。這里就很簡單了,也是我們常用的使用方式,直接sum()參數填寫某一個列就行了。按照上面的語法規則應該是一個表達式,實際上一列也是一個表達式。

select sum(order_money) from Delivery;

實例二

寫一條 SQL 查詢語句獲取即時訂單所占的百分比, 保留兩位小數。這個可能就有一點點難度了,因為你很少用這個語法,如果你用過,就會發現也很簡單。

首先你要理解,既然是查詢某一個類型的占比,肯定就需要統計總和。我們可以分別去統計到訂單總和sum1,然后再去統計即時訂單總和sum1,然后再去統計即時訂單總和sum1,然后再去統計即時訂單總和sum2。然后在相除就可以了。但是這里明確要求一條SQL語句。那該如何解決呢?

這里就需要你深入了解一下sum的運行原理,我們可以設想我們一行一行的去讀取數據,然后讓sum一行一行的累計起來,是不是就可以得到sum2的綜合了?至于sum2的綜合了?至于sum2的綜合了?至于sum1肯定很好統計,直接是表中行數的綜合。

題解方式一:

select round (
 sum(case when order_date = customer_pref_delivery_date then 1 else 0 end) /
 count(*) * 100,
 2
) as immediate_percentage
from Delivery

題解方式二:

select round (
 sum(order_date = customer_pref_delivery_date) /
 count(*) * 100,
 2
) as immediate_percentage
from Delivery

這里當sum表達式滿足條件,返回1,每次讀到滿足的一行數據,sum都加1,最后數據讀完sum也就加完了。因此滿足條件的總條數就出來了。

關于如何在MySQL中使用sum函數就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂伦春自治旗| 京山县| 冕宁县| 兴城市| 塔河县| 龙门县| 清镇市| 大连市| 永兴县| 包头市| 县级市| 乾安县| 新兴县| 嘉兴市| 苍溪县| 屯门区| 黑山县| 远安县| 和田市| 宁安市| 阿拉善右旗| 钟祥市| 汝阳县| 田东县| 台前县| 中牟县| 东安县| 亳州市| 晋江市| 满洲里市| 锡林浩特市| 阿城市| 桐乡市| 泽库县| 桃源县| 木兰县| 鄢陵县| 新竹市| 扬中市| 子洲县| 南昌县|