学校网站建设制度,高中作文网站,小程序免费制作,做设计什么网站可以兼职问题复盘本次复盘会用一个很简单的订单表作为示例。数据准备订单表建表语句如下(这里偷懒了#xff0c;使用了自增ID#xff0c;实际开发中不建议使用自增ID作为订单ID)CREATE TABLE order (id int(11) NOT NULL AUTO_INCREMENT COMMENT ‘订单ID‘,amount decimal(10,2) NOT…问题复盘本次复盘会用一个很简单的订单表作为示例。数据准备订单表建表语句如下(这里偷懒了使用了自增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)) ENGINEInnoDB DEFAULT CHARSETutf8mb4;12345插入金额为100的SQL如下(执行10次即可)INSERT INTO order(amount) VALUES (100);1所以总金额为10*1001000。问题SQL使用limit对数据进行分页查询同时使用sum()函数计算出当前分页的总金额SELECTSUM(amount)FROMorderORDER BY idLIMIT 5;123456前面也提到了运行的结果期待的结果应该为5*100500然而实际运行的结果却为1000.00(带有小数点是因为数据类型)问题排查其实如果对SELECT语句执行顺序有一定了解的朋友可以很快确定为什么返回的结果为所有的订单总金额下面我会就问题SQL的执行书序来分析问题FROMFROM子句是最先执行的确定了查询的是order这张表SELECTSELECT子句是第二个执行的子句同时SUM()函数也在此时执行了。ORDER BYORDER BY子句是第三个执行的子句其处理的结果只有一个就是订单总金额LIMITLIMIT子句是最后执行的此时结果集中只有一个结果(订单总金额)补充内容这里补充一下SELECT语句执行顺序FROM ON JOIN WHERE GROUP BY HAVING SELECTDISTINCT ORDER BY LIMIT 解决办法遇到需要统计分页数据时(除了SUM()函数外常见的COUNT()、AVG()、MAX()、MIN()函数也存在这个问题)可以选择使用子查询来处理(PS这里不考虑内存计算针对的是使用数据库解决这个问题)。上面的问题解决方案如下SELECTSUM(o.amount)FROM(SELECTamountFROMorderORDER BY idLIMIT 5) AS o;123456789运行的返回值为500.00。---------------------mysql踩坑记录之limit和sum函数混合使用问题标签ODB order min 针对 charset group 计算 mys 分页查询本条技术文章来源于互联网如果无意侵犯您的权益请点击此处反馈版权投诉本文系统来源https://www.cnblogs.com/hyhy904/p/11072377.html