group by 如何自定义规则分组,合并分组

news/2024/11/23 16:57:53/

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

1. 问题描述

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

type (类型)num (数量)
A10
B10
C10
D10
E10
F10
G10

2. 期望结果

需要得到的结果为:

type (类型)num (数量)
ACD30
B10
E10
FG20

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

http://www.ppmy.cn/news/688580.html

相关文章

使用List进行分组操作

普通对象列表进行分组 // 创建一个实体类 Data public class People {String name; //姓名Integer age; //年龄Integer sex; //性别 0 - 女; 1 - 男Double height; //身高Double weight; //体重 }public class ListGroupTest {public static void ma…

排序和分组

Python序列操作之进阶篇 转载 更新时间:2016年12月08日 09:31:59 投稿:daisy 我要评论 序列sequence是python中最基本的数据结构,本文是Python序列操作的进阶篇,本文先对序列做一个简单的概括&#…

微信公众号【用户分组管理-web页面】

人生的意志和劳动将创造奇迹般的奇迹。 Model层实体类: public class UserList{public string total { get; set; }public string count { get; set; }public userlistopenid data { get; set; }public string next_openid { get; set; }}public class userlistopenid{public …

分组、分类(分组汇总)

分类一: GROUP BY (PRODUCT,FLOOR); COL1COL2countsumAA115AA214BB113 分类二: GROUP BY ROLLUP (Col1,Col2); COL1COL2countsum备注AA115AA214A(null)29 (每一组COL2的综合) BB113B(null)13 (每一组COL2的综合) (null)(null…

2.分组列表

分组列表 sqlite3 /var/lib/murmur/murmur.sqliteserver_id,channel_id,parent_id,name,inheritaclinsert into channels values(1,2,0,2-分组,1); 来源张永光的博客

微信公众号平台如何批量给粉丝自动打标签分组

关于微信公众号平台批量给粉丝自动打标签分组功能,第三方工具微号帮提供了功能粉丝分组批量转移实现,可以在线给公众号所有粉丝自动分组打标签,公众号粉丝批量打标签分组,与公众号平台后台用户管理功能数据同步,公众号…

分组 (group)

题目描述: Yyx 给 KZB 出了一道题,就是给出n和m(m≤n),叫 KZB 求出n个相同的杯子分m组,一共会有几种分法。 KZB 已经在失败中吸取了教训他特意叫你来帮帮他。 因为 Yyx 不喜欢去模1055之类的那太小了,所以他她要你对取…

List分组的两种方式

java8之前List分组 假设有个student类&#xff0c;有id、name、score属性&#xff0c;list集合中存放所有学生信息&#xff0c;现在要根据学生姓名进行分组。 public Map<String, List<Student>> groupList(List<Student> students) {Map<String, List&…