mysql 使用sum limit_mysql踩坑记录之limit和sum函数混合使用问题

问题复盘

本次复盘会用一个很简单的订单表作为示例。

数据准备

订单表建表语句如下(这里偷懒了,使用了自增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;

1

2

3

4

5

插入金额为100的SQL如下(执行10次即可)

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

1

所以总金额为10*100=1000。

问题SQL

使用limit对数据进行分页查询,同时使用sum()函数计算出当前分页的总金额

SELECT

SUM(`amount`)

FROM

`order`

ORDER BY `id`

LIMIT 5;

1

2

3

4

5

6

前面也提到了运行的结果,期待的结果应该为5*100=500,然而实际运行的结果却为1000.00(带有小数点是因为数据类型)

问题排查

其实如果对SELECT语句执行顺序有一定了解的朋友可以很快确定为什么返回的结果为所有的订单总金额?下面我会就问题SQL的执行书序来分析问题:

FROM:FROM子句是最先执行的,确定了查询的是order这张表

SELECT:SELECT子句是第二个执行的子句,同时SUM()函数也在此时执行了。

ORDER BY:ORDER BY子句是第三个执行的子句,其处理的结果只有一个,就是订单总金额

LIMIT:LIMIT子句是最后执行的,此时结果集中只有一个结果(订单总金额)

补充内容

这里补充一下SELECT语句执行顺序

FROM

ON

JOIN

WHERE

GROUP BY

HAVING

SELECT

DISTINCT

ORDER BY

LIMIT

解决办法

遇到需要统计分页数据时(除了SUM()函数外,常见的COUNT()、AVG()、MAX()、MIN()函数也存在这个问题),可以选择使用子查询来处理(PS:这里不考虑内存计算,针对的是使用数据库解决这个问题)。上面的问题解决方案如下:

SELECT

SUM(o.amount)

FROM

(SELECT

`amount`

FROM

`order`

ORDER BY `id`

LIMIT 5) AS o;

1

2

3

4

5

6

7

8

9

运行的返回值为500.00。

---------------------

mysql踩坑记录之limit和sum函数混合使用问题

标签:ODB   order   min   针对   charset   group   计算   mys   分页查询

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:https://www.cnblogs.com/hyhy904/p/11072377.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 视图 过程 函数_MySQL视图,函数,触发器,存储过程

1. 视图视图是一个虚拟表,它的本质是根据SQL语句获取动态的数据集,并为其命名,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。使用视图我们可以把查询过程中的临时表摘出来,用视图去实现&…

ubuntu安装mysql5.7.17_ubuntu 16.04安装mysql-server_5.7.17

在MySQL官网上下载最新版的Ubuntu Linux专用的MySQL。我这里下载的是:mysql-server_5.7.17-1ubuntu16.04_amd64.deb-bundle.tar也可从以下mirrors下载:解压文件 命令为:rootubuntu:/# tar -zxvf mysql-server_5.7.17-1ubuntu16.04_amd64.deb-…

socket抓包_64、抓包分析tcp与udp

从前面的两个案例,我们了解到了如何通过原生socket函数分别创建tcp和udp服务,以及通过相应的客户端进行连接测试。在本文中,我们将继续深入地去了解tcp和udp的差别,和思考它们两者如何应该多个客户端请求1、抓包分析这里采用tcpdu…

c#水晶报表连接mysql,如何将数据库绑定到水晶报表?

i have C# program, i have DataSet that i want to bind to crystal report.how to do it ?解决方案Create a Typed DataSet from the "Add New Item > DataSet and give the dataseta useful name.In Server Explorer, drag a view with the fields you want in the…

fw313r手机登录_迅捷(FAST)fw313r路由器手机设置教程

本文中,鸿哥主要给大家介绍,迅捷(FAST)fw313r路由器用手机设置的方法。一台新买回来的迅捷(FAST)fw313r路由器,要用手机来设置它连接Internet上网,需要以下几个步骤:1、正确连接FW313R路由器2、手机连接FW313R的信号3、…

mysql 5.6.21不能选择安装路径_mysql5.6.21服务器安装图解(选择安装和数据目录)

mysql安装图解(服务器上安装mysql,只安装mysql服务)1.3 mysql安装及配置版本:MySQL5.6.21 64位1.3.1 安装.net framework.exe 4.0注意:mysql5.6版本需要安装.net framwork.exe 4.0环境1.3.2 安装mysql数据库(1)打开安装程序后,…

mysql替换sql中rank函数_MySQL sql Rank()函数实现

一字符串类 Concat函数:连接字符串 Instr函数:返回字符串在某一个字段的内容中的位置, 没有找到字符串返回0,否则返回位置(从1开始) 字符串大小写转换[upper()、ucase()和lower()、lcase()] upper()和ucase():把字符串中的小…

python决策树生成规则_ID3决策树(python实现)

决策树的生成(该函数是一个递归的过程)CreateTree输入:数据集、特征输出:字典型数据——决策树a、判断是否满足停止划分的条件若当前数据集的属性值为空,则投票表决当前样本中最多的类别若当前所有的样本类别相同,则返回当前数据的…

while循环python的范围_python-无法在while循环中从列表中排除一定范围内的项目

所以我发布了一个问题before,但是它过于简化了,正确地被标记为重复.我现在将更详细地发布我的问题,以便希望可以解决我的问题.简而言之如下:我有两个列表:a [10.0,20.0,25.0,40.0]和b [1.0,10.0,15.0,20.0,30.0,100.0]使用列表推导,我想从b中排除a中指…

怎么使用mysql打表_MySQL的表使用

-- 创建表CREATE TABLE teacher(id INT,NAME VARCHAR(20))-- 查看所有表SHOW TABLES;DESC student;DROP TABLE student;CREATE TABLE student(id INT,NAME VARCHAR(20),gender VARCHAR(2),age INT)-- ********一、增删改数据********* ----- 1.1 增加数据-- 插入所有字段。一定…

表级锁的mysql读写_Mysql的表级锁

我们首先需要知道的一个大前提是:mysql的锁是由具体的存储引擎实现的。所以像Mysql的默认引擎MyISAM和第三方插件引擎 InnoDB的锁实现机制是有区别的。可根据不同的场景选用不同的锁定机制。Mysql有三种级别的锁定:表级锁定、页级锁定、行级锁定一、定义…

account表里有什么 银行_模拟一个银行账户类Account,账户类中包括所有者、账号、余额、账户总数、存款、取款等信息。_学小易找答案...

【单选题】廉价磁盘冗余阵列RAID利用冗余技术实现高可靠性,其中RAID1的磁盘利用率为() 。【简答题】与直流调速相比,交流调速有何优点?【论述题】方法【单选题】以《老子注》一书驰名汉学界的学者是下列哪一位 ______【填空题】本任务中,所需的实训设备有:( )、( )、( )【单选…

创建mysql视图语法正确的是_MySQL创建视图的语法格式

视图,具有简化查询语句、安全性和保证逻辑数据独立性等作用创建视图的语法格式视图中,包含SELECT查询的结果,因此,视图的创建基于SELECT语句,和已经存在的数据表,视图可以建立在一张表上,也可以…

爬空气质量MySQL_爬虫:利用selenium采集某某环境网站的空气质量数据

前言:在上一篇文章中,我们介绍了在http://PM2.5.in这个网站采集空气质量的数据,本篇文章是对其产生的一些问题的另一种解决方案,提供更加权威的数据采集。技术框架:selenium、json、etree这里的selenium是一种自动化测…

mysql导出数据意义_11、mysql导出数据

1、使用select... into outfile语句导出数据(1)txt格式select *from runoob.tb1 into outfile /tmp/runoob.txt;(2)CSV格式select * from passwd into outfile /tmp/runoob.txt fields terminated by , enclosed by " lines terminated by \r\n;(3)生成一种文件&#xff0…

操作失败10秒内未完成启动服务mysql_01-MySQL 命令行-cmd用法-未完成

01.png02.png03.png04.png05.png06.png07.png08.png09.png一、mysql服务的启动和停止net stop mysqlnet start mysql二、登陆mysql语法如下: mysql -u用户名 -p用户密码键入命令mysql -uroot -p, 回车后提示你输入密码,输入12345,…

java时间聚类_mongodb 按照时间聚类 java

当存储到mongodb中的是string类型的时间,小tips:1. 那么在对此域按照时间聚类(每周,每月)时就不能直接使用mongodb的time关键字了,因为mongodb有自己的时间类型,且目前它只认可自己的时间类型。2. 假如对于时间进行简单的聚类&…

selenium python实例录制运行_WEB自动化测试工具selenium录制器使用笔记

简介selenium录制器是最近刚流行起来的一个WEB自动化测试工具,由多测测团队开发。Selenium录制器采用关键字驱动的理念,简化测试用例的创建和维护,可以直接运行在浏览器中,就像真正的用户在操作一样。自动化脚本录制、一键回放、报…

cass坡度土方计算案例_60度斜坡怎么计算_南方CASS土方计算方法—方格网法

01概述在我们的日常工作中,遇到大量的土方修正算的相关咨询,为什么CASS的方格网土方修正算,方格设定为10米和20米,修正算结果有很大差异呢?从软件计算原理、数据质量等方面进行分析,读了这篇文章&#xff0…

java ssh cpu_初学Java ssh之Spring 第四篇

今天我来学习学习Spring中Bean。在Spring中原来还有标签啊,它相当于标签的老爸,老爸可以有很多个儿子,但是老爸只有一个哦。也就是说一个标签内可以有多个标签,每个标签代表一个java实例。定义时,需要注意两个属性&…