前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >sql: 分组后按照分组规则拼接字符串 — group by与 group_concat()

sql: 分组后按照分组规则拼接字符串 — group by与 group_concat()

作者头像
全栈程序员站长
发布2022-08-31 18:30:37
4.2K0
发布2022-08-31 18:30:37
举报

大家好,又见面了,我是你们的朋友全栈君。

分组后按照分组规则拼接字符串

cla代表学生学习的课程,num代表该学生学习该门课程的次数。

建表语句:

代码语言:javascript
复制
create table st(
	id int,
	name varchar(50),
	cla varchar(50),
	num int
);

插入数据:

代码语言:javascript
复制
insert into st values(1,'张三','高数',3);
insert into st values(1,'张三','大学物理',2);
insert into st values(1,'张三','计量经济学',3);
insert into st values(2,'李四四','高数',2);
insert into st values(2,'李四四','计量经济学',4);
insert into st values(3,'王五','高数',3);
insert into st values(3,'王五','大学物理',3);

原表数据:

这里写图片描述
这里写图片描述

group by的使用

查询出学习次数的总和

按id或name分类,查询num字段的总和 查询结果如图:

这里写图片描述
这里写图片描述

sql语句如下:

代码语言:javascript
复制
select 
	id,
	name,
	sum(num) count 
from st 
group by id,name;

或者

代码语言:javascript
复制
select 
	id,
	max(name) name,
	sum(num) count 
	from st 
group by id;

还有个恶心的:

代码语言:javascript
复制
select
	s1.id id,
	s1.name name,
	s2.count1 
from st s1 
join (select id,sum(num) count1 from st group by id ) s2
	on s1.id=s2.id 
where s1.id in (select id  from st group by id) 
group by id,name;

(这篇文章是2018-08-10 09:32:37写的,我2021年5月13日 10点37分看了一下,上面这个sql写的什么玩意。。。日常工作和面试什么的,非常不建议使用这种写法)

group_concat() 的使用

查询学生学习次数的总和以及学习课程

按id或name分类,查询num的总和,同时显示所有的cla

查询结果如图:

这里写图片描述
这里写图片描述

要达到这种效果,需要用到group_concat() : 1、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

2、语法:group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )

sql如下:

代码语言:javascript
复制
SELECT 
	id, 
	name,
	group_concat(cla separator '-') cla,
	sum(num) num
FROM st 
GROUP BY id,name;

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142725.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月2,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 分组后按照分组规则拼接字符串
  • group by的使用
    • 查询出学习次数的总和
    • group_concat() 的使用
      • 查询学生学习次数的总和以及学习课程
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档