博客
关于我
SQL 条件求和
阅读量:450 次
发布时间:2019-03-06

本文共 1735 字,大约阅读时间需要 5 分钟。

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

转载地址:http://wmokz.baihongyu.com/

你可能感兴趣的文章
MFC模态对话框和非模态对话框
查看>>
Moment.js常见用法总结
查看>>
MongoDB出现Error parsing command line: unrecognised option ‘--fork‘ 的解决方法
查看>>
mxGraph改变图形大小重置overlay位置
查看>>
MongoDB可视化客户端管理工具之NoSQLbooster4mongo
查看>>
Mongodb学习总结(1)——常用NoSql数据库比较
查看>>
MongoDB学习笔记(8)--索引及优化索引
查看>>
mongodb定时备份数据库
查看>>
mppt算法详解-ChatGPT4o作答
查看>>
mpvue的使用(一)必要的开发环境
查看>>
MQ 重复消费如何解决?
查看>>
mqtt broker服务端
查看>>
MQTT 保留消息
查看>>
MQTT 持久会话与 Clean Session 详解
查看>>
MQTT工作笔记0007---剩余长度
查看>>
MQTT工作笔记0009---订阅主题和订阅确认
查看>>
Mqtt搭建代理服务器进行通信-浅析
查看>>
MS Edge浏览器“STATUS_INVALID_IMAGE_HASH“兼容性问题
查看>>
ms sql server 2008 sp2更新异常
查看>>
MS UC 2013-0-Prepare Tool
查看>>