av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

MySQL中sum函數(shù)使用的實(shí)例教程

瀏覽:86日期:2023-10-05 08:12:28
文章簡(jiǎn)介

今天分享一下MySQL中的sum函數(shù)使用。該函數(shù)已經(jīng)成為大家操作MySQL數(shù)據(jù)庫(kù)中時(shí)常用到的一個(gè)函數(shù),這個(gè)函數(shù)統(tǒng)計(jì)滿足條件行中指定列的和,想必肯定大家都知道了,本身就沒什么講頭了,這篇文章主要是通過幾個(gè)小案例深入了解一下該函數(shù),以及在做MySQL查詢時(shí)如何使用sum函數(shù)做優(yōu)化。

語(yǔ)法分析

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官方文檔的一個(gè)功能描述。這里翻譯一下大致的意思是什么。

返回expr表達(dá)式的和。如果沒有返回行數(shù),則返回NULL。這里的DISTINCT是為了去掉表達(dá)式expr中的重復(fù)值。 如果沒有匹配到行,該函數(shù)也返回NULL。 如果設(shè)置了over_clause,則該函數(shù)作為窗口函數(shù)執(zhí)行。對(duì)窗口函數(shù)不熟悉的,可以去了解一下MySQL中的窗口函數(shù)。函數(shù)解釋

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

行數(shù) 訂單價(jià)格 sum值 第一行 10.00 10.00 第二行 20.00 30.00 第三行 30.00 60.00 第四行 40.00 100.00 第五行 50.00 150.00 第...行 ... ... 第十行 100.00 550.00

實(shí)例演示

假設(shè)有下面一張表(Delivery),表結(jié)構(gòu)如下:

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

delivery_id 是表的主鍵。

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

+-------------+-------------+------------+-----------------------------+-------------+| 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 |+-------------+-------------+------------+-----------------------------+-------------+

實(shí)例一

統(tǒng)計(jì)出該表中所有的訂單總金額。這里就很簡(jiǎn)單了,也是我們常用的使用方式,直接sum()參數(shù)填寫某一個(gè)列就行了。按照上面的語(yǔ)法規(guī)則應(yīng)該是一個(gè)表達(dá)式,實(shí)際上一列也是一個(gè)表達(dá)式。

select sum(order_money) from Delivery;

實(shí)例二

寫一條 SQL 查詢語(yǔ)句獲取即時(shí)訂單所占的百分比, 保留兩位小數(shù)。這個(gè)可能就有一點(diǎn)點(diǎn)難度了,因?yàn)槟愫苌儆眠@個(gè)語(yǔ)法,如果你用過,就會(huì)發(fā)現(xiàn)也很簡(jiǎn)單。

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

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

題解方式一:

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

題解方式二:

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

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

題目來源

改題目來源于LeetCode。

來源:力扣(LeetCode)

鏈接:leetcode-cn.com/problems/im…

還有一個(gè)比較不錯(cuò)的例子,推薦好好解讀一下。加深該函數(shù)的使用場(chǎng)景。

https://www.jb51.net/article/207813.htm

總結(jié)

到此這篇關(guān)于MySQL中sum函數(shù)使用的文章就介紹到這了,更多相關(guān)MySQL sum函數(shù)使用內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫(kù)
相關(guān)文章:
主站蜘蛛池模板: 国产精品黄色 | 成年视频在线观看 | 日皮视频在线观看 | 欧美精品成人 | 一级黄色片视频 | 免费黄色av | 成人在线一区二区 | 97久久久久 | a级黄色片| 精品久久久久久 | 久久九九热| 最新国产精品视频 | 精品欧美在线 | a级片在线观看 | 免费观看毛片 | 国产精品一区二区在线播放 | 欧美激情网 | 亚洲福利专区 | 五月婷婷六月激情 | 91av免费在线观看 | 国产精品天堂 | 国产成人久久精品麻豆二区 | 国产性猛交 | 日韩视频一区 | 911亚洲精品 | 亚洲一级在线 | 日韩欧美国产精品 | 国产欧美一区二区三区在线看蜜臀 | 伊人网视频 | 91蝌蚪91九色白浆 | 色婷婷网| 婷婷狠狠 | 在线免费播放av | 四虎影院在线免费观看 | 中文字幕中文字幕 | 久久一区二区视频 | 天天色天天| 久久免费网 | 中文字幕精品三区 | 黄色三级视频网站 | 一区二区三区视频 |