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

sql: 分组后按照分组规则拼接字符串 — group by与 group_concat()Markdown编辑器写博客小技巧本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传LaTex数学公式UML序列图和流程图离线写博客导入导出Markdown文件丰富的快捷键快捷键加粗Ctrl+B斜体Ctrl+I引…

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

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

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

建表语句:

create table st(
	id int,
	name varchar(50),
	cla varchar(50),
	num int
);

插入数据:

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语句如下:

select 
	id,
	name,
	sum(num) count 
from st 
group by id,name;

或者

select 
	id,
	max(name) name,
	sum(num) count 
	from st 
group by id;

还有个恶心的:

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如下:

SELECT 
	id, 
	name,
	group_concat(cla separator '-') cla,
	sum(num) num
FROM st 
GROUP BY id,name;
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 网易邮箱(126/163):授权码获取攻略

    网易邮箱(126/163):授权码获取攻略一、网易免费邮箱1、因为网易限制,第三方邮件客户端登陆网易邮箱必须用授权码登陆。浏览器登录mail.163.com(126邮箱:mail.126.com),点击路径:“设置”>>“POP3/SMTP/IMAP”。2、在右边网页中,选择“开启”(IMAP/SMTP服务),弹出“帐号安全验证”,用手机扫码发送短信,并点击“我已发送”3、验证后获取客户端授权密码4、此处可管理多个客户端授权密码二、网易VIP邮箱

    2022年4月4日
    2.7K
  • C++11新特性,利用std::chrono精简传统获取系统时间的方法

    C++11新特性,利用std::chrono精简传统获取系统时间的方法

    2022年2月4日
    74
  • 如何辨认正版mt4_真假鉴别软件

    如何辨认正版mt4_真假鉴别软件在全球零售外汇行业,外汇经纪商使用最多的还是俄罗斯迈达克公司的MT4交易平台,一些不合规的外汇经纪商也对MT4十分热衷,这使市场上几千块一个的盗版MT4日益猖獗,致使一部分交易者因此遭受一些不必要的利益侵害。那么MT4。fOrex6。cc的特点是什么?如何判别一个MT4软件是否是盗版?今天就带你们辨别真假MT4.MT4的优势1.强大的工作表现MT4强大的工作表现,这一点是毋庸置疑的。MT4自2005年7月1日推出以来,就不断的获得市场的认可。下单灵活、界面友好、交易直观等这些都是MT4平台成为外汇市场

    2022年4月19日
    71
  • c++和java的前景谁更好?

    c++和java的前景谁更好?两门语言都学到能写App的程度是不难。汉小哲觉得但是精通哪怕一门语言都是非常有挑战的。1、C语言是继机器编码、汇编语言之后第一个和计算机语言最为接近的语言,所以它做底层主流语言地位是不可动摇的,java的市场份额比c语言要大,但是在性能上面,C语言要比java快,但是c语言学习没有java简单,在工资方面很多公司c语言的待遇要比java的好。2、一般的C语言,不仅仅说的是c,而是c和c++,c/c++学习难度要大,应用面没有java广,java学习简单写,应用广,比如web开发、手机应有软件开

    2022年7月9日
    24
  • Mysql实现RowNumber[通俗易懂]

    Mysql实现RowNumber[通俗易懂]http://www.uncletoo.com/html/mysql/1060.html

    2022年6月10日
    48
  • IDEA全局搜索汉字[通俗易懂]

    IDEA全局搜索汉字[通俗易懂]IDEA全局搜索指定汉字的方法,我还没找到,但有个间接的方法是:快捷键ctrl+shift+f,通过正则表达式找到所有汉字,之后再查找要找的汉字:正则表达式:[\u4e00-\u9fa5]

    2022年6月22日
    206

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号