sql语句 group by时如何自定义规则进行分组

1. 问题描述

最近开发项目时遇到了一个需求:统计不同类型的物品的数量,但是某几种类型要合并到一起进行统计,例如:有A,B,C,D,E,F,G其中类型,但是统计时ACD合计为一种,FG合计为一种,假设表为:

type (类型) num (数量)
A 10
B 10
C 10
D 10
E 10
F 10
G 10

2. 期望结果

需要得到的结果为:

type (类型) num (数量)
ACD 30
B 10
E 10
FG 20

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 demo
GROUP 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 demo
GROUP 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);

group by 如何自定义规则分组,合并分组相关推荐

  1. @Validated规则校验和校验分组Group

    后台校验有很多的工具,最开始用的是@Valid,这个是比较简单的,不支持分组校验. Spring用@Validated对@Valid进行了封装,这样就满足了分组校验. 其实就是增加了一个group来对 ...

  2. AspectJ切面自定义注解实现参数分组校验——基础概念(2)

    AspectJ切面自定义注解实现参数分组校验--基础概念(2) 一.环境 二.创建AspectJ 2-1.基础概念 2-2.Pointcut规则表达式 2-3.切点标志符pointcut design ...

  3. powerquery分组_使用Excel Power Query进行文本分组合并

    使用场景 如图所示,现需要统计每个班级的学生名单,以"."分隔.Excel目前没有合并单元格并保留所有内容的直接功能,如果序号合并的数量比较少,可以采用传统办法手工一一合并,或者是 ...

  4. pandas学习(数据分组与分组运算、离散化处理、数据合并)

    pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表数 ...

  5. SQL低版本连续多条记录合并,多条记录分组合并

    步骤一 准备数据:temp_ combine_202208,三个字段,机构号,id号,日期 organ_no id_no date 1001 30001 20220131 1001 30001 202 ...

  6. mysql自定义函数分组_mysql中的排序和分组及分组函数

    现实中有很多这样的需求,对全班同学成绩进行排名,将所有的学生信息按照班级来分组,先将学生按班级分组再进行成绩排名等等.今天老韩就来介绍一下如何通过数据库的排序.分组.分组排序来实现这个需求(是排序,不 ...

  7. 基于Vue和Element-UI自定义分组以及分组全选Select 选择器

    文章目录 基于Vue和Element-UI自定义分组以及分组全选Select 选择器 在这里插入图片描述 源代码 基于Vue和Element-UI自定义分组以及分组全选Select 选择器 上一篇博文 ...

  8. Java8自定义条件让集合分组

    ** 将一个指定类型对象的集合按照自定义的一个操作分组: 每组对应一个List.最终返回结果类型是:List<List<T>> @param <T> */ stat ...

  9. R语言使用ggExtra包的ggMarginal函数在散点图的顶部和右侧添加边缘直方图、自定义边缘直方图不同分组的填充色(Coloring Marginal Histograms)

    R语言使用ggExtra包的ggMarginal函数在散点图的顶部和右侧添加边缘直方图.自定义边缘直方图不同分组的填充色(Coloring Marginal Histograms with ggExt ...

最新文章

  1. hdfs mv命令_大数据入门:HDFS文件管理系统简介
  2. LA3708墓地雕塑
  3. 分割点云数据_3D点云深度学习综述:三维形状分类、目标检测与跟踪、点云分割等...
  4. android开发工具下载
  5. linux 智联 网卡设置,Linux初学者DNS配置指南(四)配置Bind常见问题
  6. 【软件质量】软件质量
  7. BZOJ2243: [SDOI2011]染色
  8. Attention Model详解
  9. 论文撰写-LaTex 教程+模板
  10. == 人工智能和机器学习 AIML ==
  11. texstudio如何安装cjk宏包_Latex+CJK从安装到使用【1】
  12. 《阴阳师·2栀子女》原作:梦枕貘
  13. 1.26赛尔号服务器维护时间,赛尔号稀有精灵出现时间大全(完全版)
  14. 计算机无限开机,电脑开机无限循环重启
  15. uniapp连接本地服务器请求超时
  16. 区块链技术要用到什么开发语言?
  17. PHP7.0 的新特性
  18. 贝塞尔曲线介绍及其应用
  19. matlab绘四叶玫瑰线,玫瑰线 - calculus的日志 - 网易博客
  20. VBA批量建立新工作表

热门文章

  1. android有什么作用,Android 7.0有什么功能 Android N完整功能参数介绍
  2. web常用模块测试用例
  3. agx上搭建ros2
  4. Eclipse for C/C++ 版本怎么安装JDT(Java Development Tools)
  5. EAAccessory iphone与经过苹果MFI授权认证的硬件通讯
  6. 安全审计——等级保护日志审计要求的一种解决方案
  7. 数学建模——核军备竞赛
  8. 差分放大器低通滤波器设计
  9. vb.net 教程 7-1 本地网络信息的获取 3 网络连接信息
  10. GOT-10k: A Large High-Diversity Benchmark forGeneric Object Tracking in the Wild(论文翻译)