博客
关于我
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/

你可能感兴趣的文章
Multiple websites on single instance of IIS
查看>>
mysql CONCAT()函数拼接有NULL
查看>>
multiprocessing.Manager 嵌套共享对象不适用于队列
查看>>
multiprocessing.pool.map 和带有两个参数的函数
查看>>
MYSQL CONCAT函数
查看>>
multiprocessing.Pool:map_async 和 imap 有什么区别?
查看>>
MySQL Connector/Net 句柄泄露
查看>>
multiprocessor(中)
查看>>
mysql CPU使用率过高的一次处理经历
查看>>
Multisim中555定时器使用技巧
查看>>
MySQL CRUD 数据表基础操作实战
查看>>
multisim变压器反馈式_穿过隔离栅供电:认识隔离式直流/ 直流偏置电源
查看>>
mysql csv import meets charset
查看>>
multivariate_normal TypeError: ufunc ‘add‘ output (typecode ‘O‘) could not be coerced to provided……
查看>>
MySQL DBA 数据库优化策略
查看>>
multi_index_container
查看>>
MySQL DBA 进阶知识详解
查看>>
Mura CMS processAsyncObject SQL注入漏洞复现(CVE-2024-32640)
查看>>
Mysql DBA 高级运维学习之路-DQL语句之select知识讲解
查看>>
mysql deadlock found when trying to get lock暴力解决
查看>>