MySQL中将多⾏查询结果合并为⼀⾏展⽰SQL语句书写
写在前⾯
  最近开发过程中,遇到⼀个需求是要将所查询的多条结果汇总成⼀条结果展⽰,由于之前没有接触过这⽅⾯的业务,所以经过⼀番折腾之后,解决了需求,这⾥特此记录⼀下,以供后续参考!
1、问题复现
这⾥以⼀个例⼦进⾏说明:最新fastjson反序列化
需求:⼀个员⼯每⽉是否完成了打卡,要求统计员⼯当⽉完成和未完成⽇期,展⽰结果如下:
测试的数据库表字段如下:
复制代码
CREATE TABLE time_summary (
id int NOT NULL AUTO_INCREMENT,
emp_id varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘员⼯号’,
emp_name varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘员⼯姓名’, time_date date DEFAULT NULL COMMENT ‘填报⽇期’,
finish_flag varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT ‘完成标志:0:未完成,1:已完成’,
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
复制代码
测试数据如下:
View Code
这种情况下,我们⼀般可以将所有的情况查询出来(这⾥以6⽉份数据为例),查询SQL如下:
p_p_name,t.time_date,t.finish_flag from time_summary t
where t.time_date >= ‘2020-06-01’ and time_date <= ‘2020-06-30’
这样查询的结果如下:
这种显然不满⾜要求,针对这种情况,要怎么做呢?
2、问题解决
这时候需要使⽤ GROUP_CONCAT() 函数解决此问题。
说明:
复制代码
1.GROUP_CONCAT() 中的值为你要合并的数据的字段名;
SEPARATOR 函数是⽤来分隔这些要合并的数据的,默认以 逗号 分隔;
’ '中是你要⽤哪个符号来分隔;
2.必须要⽤GROUP BY 语句来进⾏分组管理,不然所有的数据都会被合并成⼀条记录
复制代码
则此处对应的SQL语句如下,仅供参考!
复制代码
tastes怎么读啊SELECT
b.finished
FROM
(
SELECT
FROM
time_summary t
WHERE
t.time_date >= ‘2020-06-01’
AND t.time_date <= ‘2020-06-30’
GROUP BY
)
su
LEFT JOIN (
SELECT
GROUP_CONCAT( SUBSTRING( t.time_date, 9, 2 ) SEPARATOR ‘,’ ) AS notFinished
FROM
time_summary t
WHERE
t.time_date >= ‘2020-06-01’
AND t.time_date <= ‘2020-06-30’
AND t.finish_flag = ‘0’
GROUP BY
) a p_id = a.emp_id
LEFT JOIN (
SELECT
GROUP_CONCAT( SUBSTRING( t.time_date, 9, 2 ) SEPARATOR ‘,’ ) AS finished
mysql怎么导入图片
FROM
time_summary t
WHERE
java核心编程pdft.time_date >= ‘2020-06-01’
AND t.time_date <= ‘2020-06-30’
AND t.finish_flag = ‘1’
GROUP BY
) b p_id = b.emp_id
复制代码
3、内容扩展
在MySQL中字符串拼接常⽤的⽅法整理:
 1、CONCAT()
 2、CONCAT_WS()
 3、GROUP_CONCAT()
3.1 CONCAT()
语法:CONCAT(str1,str2,…)
说明:作为最常⽤的字符串拼接⽅法,但是CONCAT函数在遇到拼接中的字符串出现 NULL 的情况,会返回 NULL ⽰例:
3.2 CONCAT_WS()
抽象类能使用 final 修饰吗?此种连接字符串的⽅法,从名字上就能看出:从concat with separator,使⽤分隔符连接字符串。
语法:CONCAT_WS(separator,str1,str2,…)
mysql面试题sql语句多表联查
使⽤说明:第⼀个参数separator是⽤来分隔其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。分隔符可以是⼀个字符串,也可以是其它参数
对⽐说明:concat_ws与concat相⽐优点:
1、可以使⽤分隔符连接字符串
2、若连接的字符串出现 NULL 值,concat_ws会忽略 NULL 值,
返回其他连接字符串
⽰例1:
⽰例2:
3.3 GROUP_CONCAT()
此种连接⽅法,主要是将某⼀字段的值连接成⼀⾏进⾏显⽰,具体可以参看上⾯的问题实例。
语法 :group_concat( [DISTINCT] 连接的字段 [Order BY 排序字段 ASC/DESC] [Separator ‘分隔符’] )
说明:可以连接多个字段,也可以对连接字段进⾏排序,默认以 逗号 分隔字段

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。