Mysql --concat(),concat_ws(),group_concat()用法详解(原生sql语句)

sqlalchemy用法,参考:https://blog.csdn.net/gymaisyl/article/details/96578119

concat(), concat_ws()用法

现有一个users表,表的字段以及内容如下:
在这里插入图片描述

1:使用普通查询语句查询时:

SELECT user_id,username,user_authority from users;

获取到的结果如下:
在这里插入图片描述

2:使用concat()函数进行同样几个字段的查询,结果如下:

CONCAT(str1,str2,…)
SELECT CONCAT(user_id,username,user_authority) from users;

在这里插入图片描述

3:使用concat_ws():

CONCAT_WS(separator,str1,str2,...)

CONCAT_WS() 代表 CONCAT With Separator ,是CONCAT()的特殊形式。第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是一个字符串,也可以是其它参数;
注意:第一个参数指定分隔符。需要注意的是分隔符不能为null,如果为null,则返回结果为null。

SELECT CONCAT_WS(",",user_id,username,user_authority,is_login) from users;

在这里插入图片描述

group_concat(),与order by ,group by

现在有一个协议-父协议表protocols:
在这里插入图片描述

1:根据父协议分组:

SELECT parent_protocol,COUNT(protocolName) from protocols GROUP BY parent_protocol;

当前sql语句,根据父协议分组,获取父协议的种类,每个父协议下面有多少个协议:
在这里插入图片描述

2:根据父协议排序:

SELECT parent_protocol, protocolName from protocols ORDER BY parent_protocol;

当前sql语句,根据父协议进行排序:(和原表数据展示雷同)
在这里插入图片描述

3.使用group_concat()和group by同时进行数据查询:

SELECT parent_protocol, GROUP_CONCAT(protocolName) from protocols GROUP BY parent_protocol;

说明:
(1)、功能:将group by产生的同一个分组中的值连接起来,返回一个字符串结果。

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

通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。
在这里插入图片描述

换个分隔符:SEPARATOR
SELECT parent_protocol, GROUP_CONCAT(protocolName SEPARATOR "--") from protocols GROUP BY parent_protocol;

在这里插入图片描述

加上排序,分隔符:ORDER BY,SEPARATOR
SELECT parent_protocol, GROUP_CONCAT(protocolName ORDER BY protocolName desc SEPARATOR "  ") from protocols GROUP BY parent_protocol;

在这里插入图片描述

当前分组条件下,将对应的协议和id一起获取:GROUP_CONCAT()和CONCAT_WS()
SELECT parent_protocol, GROUP_CONCAT(CONCAT_WS(":",id,protocolName) ORDER BY protocolName desc SEPARATOR "  ") from protocols GROUP BY parent_protocol;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值