group by+group_concat解决的小问题

简介: group by+group_concat解决的小问题

建测试表:

CREATE TABLE test_001
(
  id INT,
  type2 VARCHAR(10),
  bizId VARCHAR(10),
  batchId INT
)
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(1,1,'uid1',1);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(2,1,'uid2',1);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(3,2,'fid1',1);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(4,2,'fid2',1);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(5,1,'uid3',2);
INSERT INTO test_001(id,type2,bizId,batchId) VALUES(6,2,'fid3',3);
SELECT * FROM test_001;

第一次解决,KO!

SELECT batchId,
       GROUP_CONCAT(uid) AS uid,
       GROUP_CONCAT(typeid) AS typeid
FROM
    (SELECT batchId,
           CASE WHEN type2 = '1' THEN bizId
           ELSE NULL END AS uid,
           CASE WHEN type2 = '2' THEN bizId
           ELSE NULL END AS typeid
    FROM test_001) g
GROUP BY batchId;

网络异常,图片无法展示
|

  看起来没什么毛病,哈哈哈!继续看看其他高手有没有什么值得学习的解决方案。

SELECT * FROM test_001;
SELECT batchId,
       GROUP_CONCAT(CASE WHEN type2 = 1 THEN bizId ELSE NULL END) AS "uid",
       GROUP_CONCAT(CASE WHEN type2 = 2 THEN bizId ELSE NULL END) AS "typeid"
FROM test_001
GROUP BY batchId;

不采用子查询显得更加的优雅,get!结果符合要求!

 附原文链接:https://www.v2ex.com/t/535679

  顺手温习一下concat、concat_ws、group_concat函数的使用方法。

 concat(str1,str2,str3,...) 字符串拼接

 如果有任何一个参数为null,则返回值为null。

 concat_ws(separator,str1,str2,...)

 指定分隔符拼接,分隔符不能为null。

 group_concat( ) 分组拼接

 group_concat([distinct] col [order by xxx desc] [separator '分隔符'])

SELECT * FROM test_001
-- 例子1
SELECT batchId,
       GROUP_CONCAT(bizId ORDER BY bizId DESC SEPARATOR '_') AS xxx
FROM test_001
GROUP BY batchId
-- 例子2
SELECT batchId,
       GROUP_CONCAT(CONCAT_WS('-',type2,bizId) ORDER BY bizId)
FROM test_001
GROUP BY batchId
目录
相关文章
|
8月前
|
开发框架 .NET 编译器
C#-Group By 的使用
group by 是linq中的分组功能,能通过给定的字段对数据集进行分组,得到分组后的结果。
169 0
|
10月前
|
关系型数据库 MySQL Windows
Mysql (ONLY_FULL_GROUP_BY) Expression #1 of SELECT list is not in GROUP BY ...
Mysql (ONLY_FULL_GROUP_BY) Expression #1 of SELECT list is not in GROUP BY ...
73 0
|
12月前
|
SQL 关系型数据库 MySQL
GROUP BY和ORDER BY的区别
GROUP BY和ORDER BY的区别
246 0
|
SQL 关系型数据库 MySQL
only_full_group_by问题而引发的对group by的深入思考
only_full_group_by问题而引发的对group by的深入思考
111 0
|
SQL
ORDER BY && GROUP BY
ORDER BY && GROUP BY
69 0
ORDER BY && GROUP BY
group by
group by
71 0
|
SQL 关系型数据库 MySQL
【已解决】SELECT list is not in GROUP BY clause and contains nonaggregated column
MySQL5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效。
196 0
|
关系型数据库 MySQL
十一、GROUP_CONCAT的使用
十一、GROUP_CONCAT的使用
420 0
|
SQL 关系型数据库 数据挖掘
你真的懂使用Group by?
你真的懂使用Group by?
481 0
你真的懂使用Group by?
|
SQL
十、GROUP BY 和 HAVING 的使用
十、GROUP BY 和 HAVING 的使用
255 0