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
目录
相关文章
|
数据采集 分布式计算 监控
新一代数据质量平台datavines
新一代数据质量平台datavines
1085 0
|
SQL 分布式计算 Hadoop
Hive使用Impala组件查询(1)
Hive使用Impala组件查询(1)
713 0
|
Python
通俗易懂的sys.argv[]的用法
通俗易懂的sys.argv[]的用法
326 0
|
SQL 关系型数据库 Java
实时数仓 Hologres操作报错合集之遇到:Hologres query next from pg executor failed问题,该怎么处理
在使用阿里云实时数仓Hologres时,可能会遇到不同类型的错误。例如:1.内存超限错误、2.字符串缓冲区扩大错误、3.分区导入错误、4.外部表访问错误、5.服务未开通或权限问题、6.数据类型范围错误,下面是一些常见错误案例及可能的原因与解决策略的概览。
|
SQL 关系型数据库 MySQL
实时数仓 Hologres操作报错合集之遇到报错:连接到 FE 失败,剩余的连接槽保留用于非复制超级用户连接,该怎么处理
在使用阿里云实时数仓Hologres时,可能会遇到不同类型的错误。例如:1.内存超限错误、2.字符串缓冲区扩大错误、3.分区导入错误、4.外部表访问错误、5.服务未开通或权限问题、6.数据类型范围错误,下面是一些常见错误案例及可能的原因与解决策略的概览。
|
关系型数据库 数据库 PostgreSQL
PostgreSQL数据库的字符串拼接语法使用说明
【6月更文挑战第11天】PostgreSQL数据库的字符串拼接语法使用说明
1303 1
|
JavaScript
vue报错 | Duplicate keys detected: ‘0’. This may cause an update error.
vue报错 | Duplicate keys detected: ‘0’. This may cause an update error.
222 3
|
11月前
|
消息中间件 Kafka 流计算
FlinkKafkaConsumer相同group.id多个任务消费kafka问题
当使用FlinkKafkaConsumer消费Kafka时,即使设置了相同的group.id,由于Flink内部管理partition的消费offset,两个程序仍能同时消费所有数据。这与KafkaConsumer不同,后者严格遵循消费组隔离原则,避免重复消费同一分区的数据。Flink为实现exactly-once语义,需要独立管理offset,这导致了上述现象。
|
11月前
|
Java
Java“NumberFormatException”解决
当尝试将字符串转换为数字时,若字符串格式不正确,则会抛出“NumberFormatException”。解决方法:1. 检查字符串是否为空或仅包含空白字符;2. 确保字符串中的字符都是数字;3. 使用异常处理捕获并处理该异常。
530 1