group by 如何自定义规则分组,合并分组
来源:互联网 发布:人力资源 知乎 编辑:程序博客网 时间:2024/05/29 14:55
sql语句 group by时如何自定义规则进行分组
1. 问题描述
最近开发项目时遇到了一个需求:统计不同类型的物品的数量,但是某几种类型要合并到一起进行统计,例如:有A,B,C,D,E,F,G其中类型,但是统计时ACD合计为一种,FG合计为一种,假设表为:
2. 期望结果
需要得到的结果为:
3. 解决方案
解决方案肯定是多元化的,既可以在查询时进行处理,也可以在Java等高级语言拿到数据后进行处理,并且各自的处理方案会有多种,这里仅将本人采用的方案贴出。
因为博主认为在查询出数据后再对数据进行处理,不如在查询时就处理好方便,于是在查阅了众多资料之后终于找到了解决方案,采用 case when then
语句,针对上例,SQL 语句如下:
SELECT CASE WHEN `type` IN('A','C','D') THEN 'ACD'WHEN `type` IN ('F', 'G') THEN 'FG'ELSE `type` END AS `types`, SUM(num)FROM demoGROUP BY `types` 等同于:SELECT CASE WHEN `type` IN('A','C','D') THEN 'ACD'WHEN `type` IN ('F', 'G') THEN 'FG'ELSE `type` END AS `types`, SUM(num)FROM demoGROUP BY CASE WHEN `type` IN('A','C','D') THEN 'ACD'WHEN `type` IN ('F', 'G') THEN 'FG'ELSE `type` END
4.后记
在遇到这个问题的时候我觉得开始觉得应该很麻烦,于是尝试性地上百度寻找答案,发现有些讲的是
GROUP_CONCAT
,有些讲得很复杂(举写出来的SQL太繁杂),最后找到在快要放弃的时候case when
这个关键字,再查找case when 与group by 用法
的时候才渐渐有眉目,故以此记之,希望对大家有用,也留作自己备忘。
附. 测试表SQL语句
/*Table structure for table `demo` */DROP TABLE IF EXISTS `demo`;CREATE TABLE `demo` ( `type` varchar(10) DEFAULT NULL, `num` int(11) DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=utf8;/*Data for the table `demo` */insert into `demo`(`type`,`num`) values ('A',10),('B',10),('C',10),('D',10),('E',10),('F',10),('G',10);
阅读全文
0 0
- group by 如何自定义规则分组,合并分组
- Sqlserver 中如何通过group by 实现分组合并
- group by分组查询
- group by分组
- GROUP BY 分组查询
- group by 分组
- 分组函数(group by)
- Oracle数据库之group by:按自定规则分组
- 自定义分组Group
- MapReduce自定义分组Group
- Hadoop自定义分组Group
- hadoop自定义分组group
- group by分组的应用
- 分组函数+group by + having
- SQL分组查询group by
- SQL 分组函数 group by
- SQL group by分组查询
- mysql(Group By 分组查询)
- listbox1中内容加到listbox2中
- cocos2dx作茧自缚修改creator_to_cocos2dx(一)
- POJ
- 伪知识之了解数据库中备份集中的数据库备份与现有的数据库问题的解决方式持续更新:【内向即失败--王奕君】
- Linux下MySQL的安装
- group by 如何自定义规则分组,合并分组
- M进制转10进制
- Linux网络编程
- 【C1】JavaScript是什么
- Hadoop集群搭建
- 16.springboot任务调度
- 内存堆栈的奇怪现象
- java -- StringBuffer、Arrays系统方法用法
- 第3条:用私有构造器或者枚举类型强化Singleton属性