最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mysql踩坑之limit與sum函數(shù)混合使用問題詳解

 更新時(shí)間:2019年06月07日 09:42:55   作者:Null  
這篇文章主要給大家介紹了關(guān)于mysql踩坑之limit與sum函數(shù)混合使用問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用mysql具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧

前言

今天同事在同步完訂單數(shù)據(jù)后,由于訂單總金額和數(shù)據(jù)源的總金額存在差異,選擇使用LIMIT和SUM()函數(shù)計(jì)算當(dāng)前分頁的總金額來和對方比較特定訂單的總金額,卻發(fā)現(xiàn)計(jì)算出來的金額并不是分頁的訂單總金額,而是所有訂單的總金額。

數(shù)據(jù)庫版本為mysql 5.7,下面會用一個(gè)示例復(fù)盤遇到的問題。

問題復(fù)盤

本次復(fù)盤會用一個(gè)很簡單的訂單表作為示例。

數(shù)據(jù)準(zhǔn)備

訂單表建表語句如下(這里偷懶了,使用了自增ID,實(shí)際開發(fā)中不建議使用自增ID作為訂單ID)

CREATE TABLE `order` (
 `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '訂單ID',
 `amount` decimal(10,2) NOT NULL COMMENT '訂單金額',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

插入金額為100的SQL如下(執(zhí)行10次即可)

INSERT INTO `order`(`amount`) VALUES (100);

所以總金額為10*100=1000。

問題SQL

使用limit對數(shù)據(jù)進(jìn)行分頁查詢,同時(shí)使用sum()函數(shù)計(jì)算出當(dāng)前分頁的總金額

SELECT 
  SUM(`amount`)
FROM
  `order`
ORDER BY `id`
LIMIT 5;

前面也提到了運(yùn)行的結(jié)果,期待的結(jié)果應(yīng)該為5*100=500,然而實(shí)際運(yùn)行的結(jié)果卻為1000.00(帶有小數(shù)點(diǎn)是因?yàn)閿?shù)據(jù)類型)

問題排查

其實(shí)如果對SELECT語句執(zhí)行順序有一定了解的朋友可以很快確定為什么返回的結(jié)果為所有的訂單總金額?下面我會就問題SQL的執(zhí)行書序來分析問題:

  1. FROM:FROM子句是最先執(zhí)行的,確定了查詢的是order這張表
  2. SELECT:SELECT子句是第二個(gè)執(zhí)行的子句,同時(shí)SUM()函數(shù)也在此時(shí)執(zhí)行了。
  3. ORDER BY:ORDER BY子句是第三個(gè)執(zhí)行的子句,其處理的結(jié)果只有一個(gè),就是訂單總金額
  4. LIMIT:LIMIT子句是最后執(zhí)行的,此時(shí)結(jié)果集中只有一個(gè)結(jié)果(訂單總金額)

補(bǔ)充內(nèi)容

這里補(bǔ)充一下SELECT語句執(zhí)行順序

  1. FROM <left_table>
  2. ON <join_condition>
  3. <join_type> JOIN <right_table>
  4. WHERE <where_condition>
  5. GROUP BY <group_by_list>
  6. HAVING <having_condition>
  7. SELECT
  8. DISTINCT <select_list>
  9. ORDER BY <order_by_condition>
  10. LIMIT <limit_number>

解決辦法

遇到需要統(tǒng)計(jì)分頁數(shù)據(jù)時(shí)(除了SUM()函數(shù)外,常見的COUNT()、AVG()、MAX()、MIN()函數(shù)也存在這個(gè)問題),可以選擇使用子查詢來處理(PS:這里不考慮內(nèi)存計(jì)算,針對的是使用數(shù)據(jù)庫解決這個(gè)問題)。上面的問題解決方案如下:

SELECT 
  SUM(o.amount)
FROM
  (SELECT 
    `amount`
  FROM
    `order`
  ORDER BY `id`
  LIMIT 5) AS o;

運(yùn)行的返回值為500.00。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對腳本之家的支持。

相關(guān)文章

  • MySQL?根據(jù)表名稱生成完整select語句詳情

    MySQL?根據(jù)表名稱生成完整select語句詳情

    這篇文章主要介紹了MySQL?根據(jù)表名稱生成完整select語句,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • MySQL8數(shù)據(jù)庫安裝及SQL語句詳解

    MySQL8數(shù)據(jù)庫安裝及SQL語句詳解

    本文詳細(xì)講解了MySQL8數(shù)據(jù)庫安裝及SQL語句用法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-02-02
  • mysql 5.7.9 免安裝版配置方法圖文教程

    mysql 5.7.9 免安裝版配置方法圖文教程

    這篇文章主要為大家分享了mysql 5.7.9 免安裝版配置方法圖文教程,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 一文說透什么是MySQL的預(yù)編譯

    一文說透什么是MySQL的預(yù)編譯

    這篇文章主要介紹了一文說透什么是MySQL的預(yù)編譯,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • SQL數(shù)據(jù)去重的3種方法實(shí)例詳解

    SQL數(shù)據(jù)去重的3種方法實(shí)例詳解

    SQL去重是數(shù)據(jù)分析工作中比較常見的一個(gè)場景,下面這篇文章主要給大家介紹了關(guān)于SQL數(shù)據(jù)去重的3種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Ubuntu手動安裝mysql5.7.10

    Ubuntu手動安裝mysql5.7.10

    這篇文章主要為大家詳細(xì)介紹了Ubuntu手動安裝mysql5.7.10的詳細(xì)過程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • mysql實(shí)現(xiàn)遞歸查詢的方法示例

    mysql實(shí)現(xiàn)遞歸查詢的方法示例

    本文主要介紹了mysql實(shí)現(xiàn)遞歸查詢的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • mysql增量備份及斷點(diǎn)恢復(fù)腳本實(shí)例

    mysql增量備份及斷點(diǎn)恢復(fù)腳本實(shí)例

    生產(chǎn)環(huán)境中在mysql中誤操作是非常正常的,所以就需要用到mysql的增量備份恢復(fù)。增量備份是我們經(jīng)常用到的,它可以指定某個(gè)誤操作的時(shí)間以及位置點(diǎn)進(jìn)行數(shù)據(jù)恢復(fù),更加準(zhǔn)確的恢復(fù)我們想要還原的數(shù)據(jù)。
    2018-09-09
  • MySQL優(yōu)化之緩存優(yōu)化(續(xù))

    MySQL優(yōu)化之緩存優(yōu)化(續(xù))

    本文是MySQL優(yōu)化系列文章的第一篇緩存優(yōu)化的續(xù)篇,為大家更為詳細(xì)的介紹緩存優(yōu)化的方方面面,希望大家能夠喜歡
    2017-03-03
  • MySQL存儲過程的異常處理方法

    MySQL存儲過程的異常處理方法

    這篇文章主要介紹了MySQL存儲過程的異常處理方法,可實(shí)現(xiàn)有效調(diào)試MySQL存儲過程處理結(jié)果的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-07-07

最新評論

拉萨市| 右玉县| 福泉市| 惠东县| 潞城市| 星子县| 万宁市| 花莲市| 磐安县| 芮城县| 镇雄县| 平江县| 略阳县| 黔江区| 三门县| 乌什县| 正定县| 玉门市| 莎车县| 濉溪县| 伽师县| 遂平县| 文登市| 库尔勒市| 万年县| 远安县| 从化市| 福清市| 平安县| 年辖:市辖区| 漯河市| 江阴市| 吴旗县| 洪雅县| 于田县| 四会市| 和硕县| 武隆县| 通渭县| 司法| 青田县|