好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > mysql踩坑之limit與sum函數混合使用問題詳解

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

熱門標簽:昌德訊外呼系統 電話機器人的價格多少錢一個月 中國地圖標注公司 400電話申請廠家現貨 福建外呼電銷機器人加盟 百度地圖標注要什么軟件 自己做地圖標注需要些什么 天津公司外呼系統軟件 徐涇鎮騰訊地圖標注

前言

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

數據庫版本為mysql 5.7,下面會用一個示例復盤遇到的問題。

問題復盤

本次復盤會用一個很簡單的訂單表作為示例。

數據準備

訂單表建表語句如下(這里偷懶了,使用了自增ID,實際開發中不建議使用自增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如下(執行10次即可)

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

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

問題SQL

使用limit對數據進行分頁查詢,同時使用sum()函數計算出當前分頁的總金額

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

前面也提到了運行的結果,期待的結果應該為5*100=500,然而實際運行的結果卻為1000.00(帶有小數點是因為數據類型)

問題排查

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

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

補充內容

這里補充一下SELECT語句執行順序

  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>

解決辦法

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

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

運行的返回值為500.00。

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

您可能感興趣的文章:
  • MySQL查詢優化:LIMIT 1避免全表掃描提高查詢效率
  • 為什么MySQL分頁用limit會越來越慢
  • mysql優化之query_cache_limit參數說明
  • 詳解Mysql order by與limit混用陷阱
  • mysql分頁的limit參數簡單示例
  • MySQL limit分頁大偏移量慢的原因及優化方案
  • Mysql排序和分頁(order by&limit)及存在的坑
  • MySQL limit使用方法以及超大分頁問題解決
  • 如何提高MySQL Limit查詢性能的方法詳解
  • MySQL Limit性能優化及分頁數據性能優化詳解
  • 淺談mysql使用limit分頁優化方案的實現
  • MySQL中limit對查詢語句性能的影響

標簽:梅河口 北京 陜西 駐馬店 黔西 荊門 鄂爾多斯 昌都

巨人網絡通訊聲明:本文標題《mysql踩坑之limit與sum函數混合使用問題詳解》,本文關鍵詞  mysql,踩坑,之,limit,與,sum,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《mysql踩坑之limit與sum函數混合使用問題詳解》相關的同類信息!
  • 本頁收集關于mysql踩坑之limit與sum函數混合使用問題詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欧美精品一区二区三区免费| 永久看日本大片免费35分钟| 69式在线观看视频免费| 潮 喷 水 爽 尿 视频| 91久久久久久久精品青草第1集 | 免费成年人视频网站| 外国老少性配| 久久人妻无码精品一区二区三区 | 美艳放荡的小yi子| 亚洲 欧美 图区 自拍| 天降女子樱花动漫| ?樱桃视频?免费观看| 日本女护士献身取精| 翁情难自禁无删减版电影| 欧美又黄又粗又大AV毛俄罗斯人| 国产在线拍偷自揄拍无码成人小说 | 久久久国产| 吾色网站| 女性脱??给我揉??| 微拍 福利 视频 国产| 日本一级A片毛片丰满的少妇麻豆| 一级毛片全部免费播放| 免费在线观看亚洲| 偷吃高H公翁与熄| 国产特黄三级三级三级| 青青青青青免精品视频| 三级a级情欲在线观看| 日本中文字幕av久久葵司| 国产又色又爽又刺激在线观看| 弄逼逼| 九九热伊人| 一级二级A片无码高潮免费看欧美| 二次元掀裙子打屁屁到红| 欧美 亚洲 中文 国产综合| 国产小萍萍挤奶喷奶水| 欧美色偷偷| 欧美性猛交XXXX乱大交3男男| 国精产品一区一区三区公司背景 | 免费看男阳茎进女阳道120秒| AV一区AV久久AV无码99| 日本与黑人?╳乄?|