欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2021年03月17日 16:59:40   作者:A夢(mèng)多啦A  
這篇文章主要給大家介紹了關(guān)于MySQL中sum函數(shù)使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

文章簡(jiǎn)介

今天分享一下MySQL中的sum函數(shù)使用。該函數(shù)已經(jīng)成為大家操作MySQL數(shù)據(jù)庫(kù)中時(shí)常用到的一個(gè)函數(shù),這個(gè)函數(shù)統(tǒng)計(jì)滿足條件行中指定列的和,想必肯定大家都知道了,本身就沒(méi)什么講頭了,這篇文章主要是通過(guò)幾個(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á)式的和。如果沒(méi)有返回行數(shù),則返回NULL。這里的DISTINCT是為了去掉表達(dá)式expr中的重復(fù)值。
  • 如果沒(méi)有匹配到行,該函數(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í)也沒(méi)錯(cuò),只是表達(dá)的不是很準(zhǔn)確或者他不夠真實(shí)了解運(yùn)行原理。
實(shí)際上該函數(shù)是根據(jù)匹配行的值,一個(gè)一個(gè)累加起來(lái)的。這里舉個(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è)期望的配送日期(和下單日期相同或者在那之后)。如果顧客期望的配送日期和下單日期相同,則該訂單稱(chēng)為 「即時(shí)訂單」,否則稱(chēng)為「計(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ù)填寫(xiě)某一個(gè)列就行了。按照上面的語(yǔ)法規(guī)則應(yīng)該是一個(gè)表達(dá)式,實(shí)際上一列也是一個(gè)表達(dá)式。

select sum(order_money) from Delivery;

實(shí)例二

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

首先你要理解,既然是查詢某一個(gè)類(lèi)型的占比,肯定就需要統(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ì)起來(lái),是不是就可以得到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_percentage
from Delivery

題解方式二:

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

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

題目來(lái)源

改題目來(lái)源于LeetCode。

來(lái)源:力扣(LeetCode)

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

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

http://www.dbjr.com.cn/article/207813.htm

總結(jié)

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

相關(guān)文章

  • 淺析MySQL 主鍵使用數(shù)字還是uuid查詢快

    淺析MySQL 主鍵使用數(shù)字還是uuid查詢快

    在實(shí)際開(kāi)發(fā)中可能會(huì)生成uuid作為主鍵那么疑問(wèn)來(lái)了,到底MySQL 主鍵使用數(shù)字還是uuid查詢快呢?下面小編給大家?guī)?lái)實(shí)例代碼給大家詳細(xì)介紹,感興趣的朋友跟隨小編一起看看吧
    2021-08-08
  • Linux系統(tǒng)中安裝MySQL的詳細(xì)圖文步驟

    Linux系統(tǒng)中安裝MySQL的詳細(xì)圖文步驟

    本文的主要內(nèi)容是在 Linux 上安裝 MySQL,以下內(nèi)容是源于 B站 - MySQL數(shù)據(jù)庫(kù)入門(mén)到精通 整理而來(lái),需要的朋友可以參考下
    2023-06-06
  • mysql?分組函數(shù)和分組查詢使用詳解

    mysql?分組函數(shù)和分組查詢使用詳解

    分組函數(shù)用作統(tǒng)計(jì)使用,又稱(chēng)聚合函數(shù),統(tǒng)計(jì)函數(shù),組函數(shù),這篇文章主要介紹了mysql分組函數(shù)分組查詢的操作代碼,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • mysql中插入emoji表情失敗的原因與解決

    mysql中插入emoji表情失敗的原因與解決

    這篇文章主要給大家介紹了關(guān)于mysql中插入emoji表情失敗的原因與解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • mysql 8.0.12 快速安裝教程

    mysql 8.0.12 快速安裝教程

    這篇文章主要為大家詳細(xì)介紹了mysql 8.0.12的快速安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • MySQL線程處于Opening tables的問(wèn)題解決方法

    MySQL線程處于Opening tables的問(wèn)題解決方法

    在本篇文章里小編給大家分享了關(guān)于MySQL線程處于Opening tables的問(wèn)題解決方法,有興趣的朋友們學(xué)習(xí)下。
    2019-01-01
  • Mysql 忘記root密碼的完美解決方法

    Mysql 忘記root密碼的完美解決方法

    通常在使用Mysql數(shù)據(jù)庫(kù)時(shí),如果長(zhǎng)時(shí)間沒(méi)有登陸,或者由于工作交接完成度不高,會(huì)導(dǎo)致數(shù)據(jù)庫(kù)root登陸密碼忘記,本文給大家介紹一種當(dāng)忘記mysql root密碼時(shí)的解決辦法,一起看看吧
    2016-12-12
  • 通過(guò)案例分析MySQL中令人頭疼的Aborted告警

    通過(guò)案例分析MySQL中令人頭疼的Aborted告警

    這篇文章通過(guò)案例跟大家分析了MySQL中令人頭疼的Aborted告警的相關(guān)資料,文中將Aborted告警介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。
    2017-06-06
  • Mysql出現(xiàn)問(wèn)題:error?while?loading?shared?libraries:?libaio解決方案

    Mysql出現(xiàn)問(wèn)題:error?while?loading?shared?libraries:?libaio解

    這篇文章主要介紹了Mysql出現(xiàn)問(wèn)題:error?while?loading?shared?libraries:?libaio解決方案的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • MySQL中CONCAT()函數(shù)拼接出現(xiàn)NULL的問(wèn)題解決

    MySQL中CONCAT()函數(shù)拼接出現(xiàn)NULL的問(wèn)題解決

    本文主要介紹了MySQL中CONCAT()函數(shù)拼接出現(xiàn)NULL的問(wèn)題解決,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03

最新評(píng)論