mysql函数编写(MySQL中sum函数使用的实例教程)
mysql函数编写
MySQL中sum函数使用的实例教程文章简介
今天分享一下MySQL中的sum函数使用。该函数已经成为大家操作MySQL数据库中时常用到的一个函数,这个函数统计满足条件行中指定列的和,想必肯定大家都知道了,本身就没什么讲头了,这篇文章主要是通过几个小案例深入了解一下该函数,以及在做MySQL查询时如何使用sum函数做优化。
语法分析
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官方文档的一个功能描述。这里翻译一下大致的意思是什么。
- 返回expr表达式的和。如果没有返回行数,则返回NULL。这里的DISTINCT是为了去掉表达式expr中的重复值。
- 如果没有匹配到行,该函数也返回NULL。
- 如果设置了over_clause,则该函数作为窗口函数执行。对窗口函数不熟悉的,可以去了解一下MySQL中的窗口函数。
函数解释
在使用该函数时,我们应该思考一下,该函数是如何统计表达式中的和呢?可能有的程序员会想,这个函数直接去统计满足条件中所有行的总和。这么理解其实也没错,只是表达的不是很准确或者他不够真实了解运行原理。
实际上该函数是根据匹配行的值,一个一个累加起来的。这里举个例子,在一个订单表中满足条件的有10行数据,我们需要统计订单中的总价,sum的初始值是0,在匹配到第一行时,订单价格是10,此时sum就变成10,匹配到第二行,订单价格是20,这时候sum就是30。第三行订单价格是50,这时候sum就是80。按照这种方式依次累加。
行数 | 订单价格 | 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 |
实例演示
假设有下面一张表(Delivery),表结构如下:
|
+ -----------------------------+---------+ | Column Name | Type | + -----------------------------+---------+ | delivery_id | int | | customer_id | int | | order_date | date | | customer_pref_delivery_date | date | | order_money | decimal | + -----------------------------+---------+ |
delivery_id 是表的主键。
该表保存着顾客的食物配送信息,顾客在某个日期下了订单,并指定了一个期望的配送日期(和下单日期相同或者在那之后)。如果顾客期望的配送日期和下单日期相同,则该订单称为 「即时订单」,否则称为「计划订单」。
里面有如下数据:
|
+ -------------+-------------+------------+-----------------------------+-------------+ | 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 | + -------------+-------------+------------+-----------------------------+-------------+ |
实例一
统计出该表中所有的订单总金额。这里就很简单了,也是我们常用的使用方式,直接sum()参数填写某一个列就行了。按照上面的语法规则应该是一个表达式,实际上一列也是一个表达式。
|
select sum (order_money) from Delivery; |
实例二
写一条 SQL 查询语句获取即时订单所占的百分比, 保留两位小数。这个可能就有一点点难度了,因为你很少用这个语法,如果你用过,就会发现也很简单。
首先你要理解,既然是查询某一个类型的占比,肯定就需要统计总和。我们可以分别去统计到订单总和sum1,然后再去统计即时订单总和sum1,然后再去统计即时订单总和sum1,然后再去统计即时订单总和sum2。然后在相除就可以了。但是这里明确要求一条SQL语句。那该如何解决呢?
这里就需要你深入了解一下sum的运行原理,我们可以设想我们一行一行的去读取数据,然后让sum一行一行的累计起来,是不是就可以得到sum2的综合了?至于sum2的综合了?至于sum2的综合了?至于sum1肯定很好统计,直接是表中行数的综合。
题解方式一:
|
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 |
这里当sum表达式满足条件,返回1,每次读到满足的一行数据,sum都加1,最后数据读完sum也就加完了。因此满足条件的总条数就出来了。
题目来源
改题目来源于LeetCode。
来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/im…
还有一个比较不错的例子,推荐好好解读一下。加深该函数的使用场景。
http://www.zzvips.com/article/158847.html
总结
到此这篇关于MySQL中sum函数使用的文章就介绍到这了,更多相关MySQL sum函数使用内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://juejin.cn/post/6937675305137995807
- mysqlsource命令作用(MySQL source命令的使用简介)
- mysql客户端怎么运行程序(MySQL 如何连接对应的客户端进程)
- mysql主机双向复制配置(浅析MySQL并行复制)
- mysql怎样建立索引(MySQL创建索引需要了解的)
- mysql8.0安装教程win10(Windows10下mysql 8.0.22 安装配置方法图文教程)
- mysql的连接池名称如何查看(如何使用mysqladmin获取一个mysql实例当前的TPS和QPS)
- mysql 加锁处理分析(mysql死锁和分库分表问题详解)
- mysql基础操作报告(gorm操作MySql数据库的方法)
- mysqlorder工作原理(详解Mysql order by与limit混用陷阱)
- centos7.5安装mysql教程(CentOS8下MySQL 8.0安装部署的方法)
- docker 镜像mysql(解决docker拉取mysql镜像太慢的情况)
- mysql数据库事务处理(MySQL数据库事务与锁深入分析)
- centos如何安装mysql8.0版本(Centos7下安装MySQL8.0.23的步骤小白入门级别)
- 图片如何存放在mysql中(将图片保存到mysql数据库并展示在前端页面的实现代码)
- mysql查询语法总结(MySQL全面瓦解之查询的过滤条件详解)
- mysql limit越大越慢(MySQL limit分页大偏移量慢的原因及优化方案)
- 44岁夏雨演谋女郎爸,大其24岁却看不出,互动不怕袁泉吃醋(44岁夏雨演谋女郎爸)
- 全椒人,你还记得吗 那年,那人,那网,那些我们的青春记忆(全椒人你还记得吗)
- 全椒人在苏州10周年联谊会在苏州举办(全椒人在苏州10周年联谊会在苏州举办)
- 这个全椒人被通报表彰,看看你认识吗(这个全椒人被通报表彰)
- 全椒人,38年集体回忆 1980-2018 ,看完不要哭(全椒人38年集体回忆)
- 董元奔吟咏历代文人 1012新旧均可 全椒人张璪 1022 -1093(董元奔吟咏历代文人)
热门推荐
- vue如何检查数组变化(Vue2中无法检测到数组变动的原因及解决)
- vue 修改后刷新(Vue使用三种方法刷新页面)
- Web安全色
- css文字图片垂直居中对齐(CSS设置文字图片垂直居中的方法总结)
- django session验证(Django框架验证码用法实例分析)
- truncate和delete(delete、truncate、drop的区别以及该如何选择)
- linuxrabbitmq安装和使用教程(用docker部署RabbitMQ环境的详细介绍)
- sql server 过期激活(SQL Server评估期已过问题的解决方法)
- python第三方库的使用方法和作用(Python第三方库face_recognition在windows上的安装过程)
- 阿里云ecs怎么配置环境(阿里云ECS实例中运行网站常见状态码的报错分析)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9