当前位置: 首页 > news >正文

impala中group_concat()函数无法对内容进行order by

描述:

使用的是impala数据库,假设有四笔数据,是无序的,业务上要求将其行转列成一行数据,并且里面的数据要按从小到大排序。

过程:

猜测:

数据库Oracle、Mysql、MSsql等支持group_concat中使用order by,那么impala支持不支持呢?实践一下发现:Impala不支持group_concat中使用order by

总结:常见数据库Oracle、Mysql、MSsql等支持group_concat中使用order by,但是Impala不支持group_concat中使用order by

方法一:

尝试先对这四笔数据进行排序,再进行行转列,但发现最终出来的数据还是达不到预期:

总结:内层的order by语句单独使用不会影响结果集仅排序在执行期间就被代码分析器给优化掉了。内层的order by要影响结果集,可以配合limit使用。

with temp as (
select t.*
from (
select '5' as id 
union all 
select '2' as id 
union all 
select '3' as id
union all 
select '4' as id ) t 
order by id 
limit 4
)
select group_concat(id)
from temp;

 方法二:

采用 row_number + concat_ws + group_concat,达到预期效果。

注意:如果是业务强烈要求、或者数据量不会太大的话,建议这么处理

步骤:
1、聚合前的数据筛选,完成数据过滤
2、开窗,row_number进行数据排序,添加序号,并cast转为字符串;
3、多字段组合,concat_ws进行聚合字段和序号字段的拼接,并replace掉序号为空串(concat_ws只支持字符串)
4、单字段聚合,group_concat进行最后的数据拼接
5、输出结果!

with temp as (
select '5' as id 
union all 
select '2' as id 
union all 
select '3' as id
union all 
select '4' as id ),
rn as (select id,cast(row_number() over(order by id) as string) as rn from temp),
re as (select group_concat(concat_ws('',id,replace(rn,rn,''))) id from rn)
select * 
from re;

总结:

1、 内层的order by语句单独使用不会影响结果集仅排序在执行期间就被代码分析器给优化掉了。内层的order by要影响结果集,可以配合limit使用。

2、如果是业务强烈要求、或者数据量不会太大的话,采用 row_number + concat_ws + group_concat,达到预期效果。

http://www.lryc.cn/news/91895.html

相关文章:

  • MySQL 数据库全局变量中文解释
  • 设计模式之~状态模式
  • 【21JavaScript break 和 continue 语句】JavaScript中的break和continue语句:控制循环流程的关键技巧
  • 【SpringBoot】 设置随机数据 用于测试用例
  • chatgpt赋能python:Python如何获取微信聊天记录
  • VP记录:Codeforces Round 599 (Div. 2) A~D
  • 01-项目介绍
  • 《Python编程从入门到实践》学习笔记06字典
  • 为什么说程序员和产品经理一定要学一学PMP
  • LearnOpenGL-高级OpenGL-9.几何着色器
  • 8.视图和用户管理
  • bootstrapvue上传文件并存储到服务器指定路径及从服务器某路径下载文件
  • Qt OpenGL(四十二)——Qt OpenGL 核心模式-GLSL(二)
  • C++基础讲解第八期(智能指针、函数模板、类模板)
  • JMeter 测试 ActiveMq
  • 2023年4月和5月随笔
  • 新Linux服务器安装Java环境[JDK、Tomcat、MySQL、Nacos、Redis、Nginx]
  • 精简总结:一文说明软件测试基础概念
  • 通过 Gorilla 入门机器学习
  • 【二叉树】298. 二叉树最长连续序列
  • Matlab论文插图绘制模板第100期—紧凑排列多子图(Tiledlayout)
  • [2.0快速体验]Apache Doris 2.0 日志分析快速体验
  • MySQL学习-数据库创建-数据库增删改查语句-事务-索引
  • 浏览器渗透攻击-渗透测试模拟环境(9)
  • MySQL数据库基础(基础命令详解)
  • 企业培训直播场景下嘉宾连线到底是如何实现的?
  • 五、JSP05 分页查询及文件上传
  • 一起看 I/O | 借助 Google Play 管理中心价格实验,优化定价策略
  • hexview 命令行操作使用说明
  • vue3+element plus,使用分页total修改成中文