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)
上一篇 2022年5月23日 上午7:40
下一篇 2022年5月23日 上午7:40


相关推荐

  • 一叶知秋,一个 LED 就能入门 Linux 内核「建议收藏」

    一叶知秋,一个 LED 就能入门 Linux 内核「建议收藏」简单点灯最近项目上需要用到LED子系统,在嵌入式Linux里面点个灯还是比较简单的,只要在某个灯对应的目录里,向相应文件写入特定值,就可以让LED亮/灭/闪烁。#echo1>/sys/class/leds/green/brightness//点亮LED#echo0>/sys/class/leds/green/brightness//熄灭LED#echoheartbeat>/sys/class/leds/green/trigger//

    2022年7月16日
    22
  • 分布式——分布式面试题

    分布式——分布式面试题文章目录分布式分布式概述分布式集群微服务多线程高并发分布式系统设计理念分布式系统的目标与要素分布式系统设计两大思路 中心化和去中心化分布式与集群的区别是什么 CAP 定理 CAP 定理的证明 BASE 理论 BASE 理论的核心思想 BASE 理论三要素 1 基本可用 2 软状态 3 最终一致性分布式分布式概述分布式分布式 distributed 是为了解决单个物理服务器容量和性能瓶颈问题而采用的优化手段 将一个业务拆分成不同的子业务 分布在不同的机器上执行 服务之间通过远程调用协同工作 对外提供服务 该领域需要解

    2026年3月16日
    2
  • 系统优化xp

    系统优化xpnbsp

    2026年3月26日
    1
  • linux小红帽网卡设定,linux下网卡如何开启flow control「建议收藏」

    linux小红帽网卡设定,linux下网卡如何开启flow control「建议收藏」Whatisawife?Beyouwouldliketohandovertoherthesavingsthepreservationofwoman.Whatisalover?Beyougosecretivelyandshedatesagainafraidthewiferunintoofwoman.Whatisabeauty…

    2022年5月18日
    47
  • 云之遥全攻略 上「建议收藏」

    云之遥全攻略 上「建议收藏」转自dakkifox作者的和讯博客,很详尽很有用的一篇攻略。原贴地址:http://dakkifox.blog.hexun.com/45908818_d.html我是傻瓜分割线所谓傻瓜版,就是你照

    2022年8月2日
    7
  • JS正则表达式语法大全(非常详细)

    JS正则表达式语法大全(非常详细)前面几节讲解了如何在 JavaScript 中使用正则表达式 以及如何执行匹配 本节就来讲一下正则表达式的具体语法 正则表达式是一种通用的工具 在 JavaScript PHP Java Python C 等几乎所有的编程语言中都能使用 但是 不同编程语言对正则表达式语法的支持不尽相同 有的编程语言支持所有的语法 有的仅支持一个子集 本节讲到的正则表达式语法适用于 JavaScript 正

    2026年3月18日
    2

发表回复

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

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