当前位置:首页 > 数据库 > SQL 条件求和

SQL 条件求和

2022年09月17日 18:04:24数据库8

SUMIF

就是 Excel 中的 sumif () 函数的功能. 工作中用的频率极其高, 像我就几乎天天在用的呢. 也是做个简单的笔记而已. 为啥我总是喜欢对比 Excel 呢, 因为我也渐渐发现, Excel 是业务小姐姐和开发人员 唯一的沟通桥梁. 有时候也不禁感慨, 像我这种, 又能做业务, 做 Excel 表格, 同时又能兼数据开发的小哥哥难道不香嘛, 不抢手嘛...

数据工作: 文员用的 Excel 就相当于开发人员用 SQL. 都是必须会的.

因为我平时用的是数据库是 Sybase IQ, 这种列式的, OLAP 型的. 特点就是, 高吞吐, 查询极快. 正好适合我做数据报表这种的极速响应. 一般如果是 千万级以下的数据呢, 我还是有些用 Mysql, 就是喜欢呀, 没啥. 但千万级以上的数据量, 你会发现 MysSql 的性能会 急剧下降. 就执行下 select count(*) from tb 就直接GG 了.

说个我真实的面试怼怼:

就一些公司老是喜欢问我 Mysql 怎查询优化, 怎么大数据之类的话题, 我真的就懒得回答, 有一次就真的怼:

只有没有钱的公司才老想着优化, 我们都是直接换更好的设备.

扯远了, 回到 sumif 求和. 还是用 Mysql 来演示一把. SQL 大多数都差不多呢.

需求

对某个字段进行 条件求和, 即 Excel 的 sumif 功能

实现

用mysql 的 IF( ) 函数就能实现. 简单以 score 表为例.

mysql> select * from cj.score;
+------+------+-------+
| s_id | c_id | score |
+------+------+-------+
| 0001 | 0001 |    80 |
| 0001 | 0002 |    90 |
| 0001 | 0003 |    99 |
| 0002 | 0002 |    60 |
| 0002 | 0003 |    80 |
| 0003 | 0001 |    80 |
| 0003 | 0002 |    80 |
| 0003 | 0003 |    80 |
+------+------+-------+
8 rows in set (0.00 sec)

需求是, 求出不同 s_id 在 课程id 为 "0001" 的 学生总分数. 当然可以只用 group by having 之类的 哈, 这里就为了举个栗子. 理解意思即可.

select 
	a.s_id, 
	sum(if(a.c_id = '0001', score, 0)) as sum_0001
from cj.score as a 
group by a.s_id
+------+----------+
| s_id | sum_0001 |
+------+----------+
| 0001 |       80 |
| 0002 |        0 |
| 0003 |       80 |
+------+----------+
3 rows in set (0.00 sec)

当然, 在 IQ 其实是不支持这种 if( ) 语法的, 于是呢, 可以用 case when 来达到同样的效果呢.

-- case when 
select 
	a.s_id, 
	sum(case when a.c_id = '0001'then score else 0 end) as sum_0001
from cj.score as a 
group by a.s_id
+------+----------+
| s_id | sum_0001 |
+------+----------+
| 0001 |       80 |
| 0002 |        0 |
| 0003 |       80 |
+------+----------+
3 rows in set (0.00 sec)

case when 果然是有点强大, 尤其是在我处理, 用户的那些垃圾数据, 和行列转换时经常要用的呢. 不扯了, 就简单一个笔记而已.

作者:致于数据科学家的小陈
来源链接:https://www.cnblogs.com/chenjieyouge/p/13662953.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/database/42591.html

分享给朋友:

“SQL 条件求和” 的相关文章

一文带你了解MySQL基础

目录 一,为什么要学习数据库 二,数据库的相关概念 2.1数据库术语...

MySQL面试有这一篇就够了

MySQL面试有这一篇就够了

MySQL面试常见知识点 1、 MySQL常用的存储引擎有什么?它们有什么区别? InnoDB InnoDB是MySQL的默认存储引擎,支持事务、行锁和外键等操作。 MyISAM MyISAM是M...

MySQL数据库(基础)

MySQL数据库(基础)

目录 1. 数据库概念 1.1 数据库是干嘛的? 1.2 数据库和数据结构是啥关系? ​1.3 两种类型的数据库 2. MySQL数据库 2.1 MySQL数据库概念 2.2 MySQL基本操作  2.2.1 建立...

JDBC连接时所犯错误1.字符集设置不合适2.连接MySQL8.0社区版时时区不一致3..包名不能以Java.命名4.驱动被弃用

Microsoft JDBC Driver 的主页为:https://msdn.microsoft.com/en-us/data/aa937724.aspx 下载所需驱动 今天连接时报了四次错,记录下来 1.java.sql.SQLException:...

数据库之关系模型的组成,特点以及完整性约束

关系模型就是用二维表描述数据本身,以及数据之间的关系。 关系模型的组成: 数据结构(表结构)+关系操作(八个操作)+完整性约束(三个完整性) 实体完整性 在关系表中,所有元组主码的值都不能为空。 参照完整性 在关系模型中,采用给关系定义外键的形式进...

性能优化|深入理解mysql索引数据结构与算法

性能优化|深入理解mysql索引数据结构与算法

什么是索引? 在mysql中,索引就是帮助mysql快速找到某条数据的一种数据结构,它是排好序的,独立于mysql表数据之外的。 索引数据结构分为哪几种 二叉树、红黑树、Hash表、B树。 在这里我们主要介绍hash表和B树...

mysql|mysql删除重复数据,一条sql就搞定

SQL 逻辑: 首先找出所有重复的sku_id 在找出这些sku_id中关联的主键id最大的一条记录(用来保留,不删除) 两个sql合并 就可以筛选出来最终需要删除的id select id from sku_and...

备战BAT|不会优化索引查询怎么办?学会这个法则无敌了!

备战BAT|不会优化索引查询怎么办?学会这个法则无敌了!

程序员日常 程序员日常应该与DBA打交道应该会很多,因为他会时不时的给你抛个慢sql,让你去优化。 可是对于刚处在新手村的你来说,这无疑是一个大难题,因为自己根本不知道如何去优化索引,这可怎么办呢? 不过不用怕,今天你如果学会了我的这篇...

MySQL查询JSON类型字段中某个属性值

MySQL查询JSON类型字段中某个属性值

只支持MySQL5.7以上的版本 user表中有如下数据: id profile 1 {“age”: 20, “name”: “...

mysql 查询1小时内

mysql 查询1小时内

由于项目的需要经常查询一个小时之内的数据,接下来吾爱编程为大家分享一下使用Mysql查询一个小时之内的数据的sql,有需要的小伙伴可以参考一下: 1、方法一: (1)、sql写法: SELECT * FROM 表名&...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。