hive sql语句和mysql用法区别存档

hive sql语句和mysql用法区别存档写在前面以下功能版本:mysql版本:5.6.17hive版本:2.2.41、GROUP_CONCAT先看下面数据表test_group:(1)简单情况需求如下:写出一个sql语句,按照category分组,并把组内的name使用“;”分隔符连接。①mysql中SELECT category, GROUP_CONCAT(nameSEPARATOR";&quo

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

写在前面

mysql和hive版本:
mysql版本:5.6.17
hive版本:2.1.1

一、GROUP_CONCAT功能

本功能测试基于以下数据表test_group:


hive sql语句和mysql用法区别存档

1、简单功能实现对比

需求如下: 写出一个sql语句,按照category分组,并把组内的name使用“; ”分隔符连接。

(1)mysql中
SELECT 
	category, 
	GROUP_CONCAT(name SEPARATOR "; ")   # SEPARATOR后面是分隔符
FROM 
	test_group 
GROUP BY 
	category 

结果如下:


hive sql语句和mysql用法区别存档

GROUP_CONCAT()函数的API如下:

功能: 将group by产生的同一个分组中的值连接起来,返回一个字符串结果。
语法: group_concat( [distinct] 要连接的字段 [order by 排序字段 asc/desc ] [separator ‘分隔符’] )
说明: 通过使用distinct可以排除重复值;如果希望对结果中的值进行排序,可以使用order by子句;separator是一个字符串值,缺省为一个逗号。

(2)hive中

hive不提供GROUP_CONCAT函数,所以需要使用其他方法代替,我们可以使用CONCAT_WS()函数代替,如下:

SELECT 
	category, 
	CONCAT_WS("\; ", COLLECT_LIST(name)) 
FROM 
	test_group 
GROUP BY 
	category     

输出结果如下:
在这里插入图片描述

注意: COLLECT_LIST表示组内不去重,COLLECT_SET表示组内去重,表示将name字段放到一个list/set中,在使用concat_ws进行连接。

2、组内排序下的GROUP_CONCAT对比

需求如下: 写出一个sql语句,按照category分组,并把组内的name和level使用“name-level”格式使用“; ”分隔符连接,并在组内使用level降序排列。

①mysql中
SELECT 
	category, 
	GROUP_CONCAT(CONCAT(name, '-', level) ORDER BY level DESC SEPARATOR "; ") as res    # ORDER BY level DESC表示组内排序
FROM 
	test_group 
GROUP BY 
	category 

输出结果如下:


hive sql语句和mysql用法区别存档

(2)hive中
SELECT 
	temp.category, 
	CONCAT_WS("\; ", COLLECT_LIST(CONCAT(tmp.name, '-', tmp.level)))  as res  # CONCAT(tmp.name, '-', tmp.level)表示将name字段和level字段使用‘-’连接
FROM 
	(
		SELECT * FROM test_group  ORDER BY level DESC
	) tmp 
GROUP BY 
	tmp.category 

结果如下:
在这里插入图片描述

二、字符串的split功能

1、hive中

在hive中,直接提供split函数,使用如下:

hive> select split("1,2,3", ',');     # 返回结果:
hive> select split("1,2,3", ',')[0];   # 返回结果:1
hive> select split("1,2,3", ',')[1];   # 返回结果:2
hive> select split("1,2,3", ',')[2];   # 返回结果:3

2、mysql中

mysql没有提供split函数,但是可以使用substring函数达到类似的效果。举例如下:

mysql> select substring_index("1,2,3",",",1);    # 返回结果:1
mysql> select substring_index("1,2,3",",",2);    # 返回结果:1,2
mysql> select substring_index("1,2,3",",",3);    # 返回结果:1,2,3
mysql> select substring_index("1,2,3",",",-1);   # 返回结果:3
mysql> select substring_index("1,2,3",",",-2);   # 返回结果:2,3
mysql> select substring_index("1,2,3",",",-3);   # 返回结果:1,2,3

负号表示反向取数,和py中功能一样。

但是如果我们想把2提取出来,该怎么做?用2个substring(),举例如下:

mysql> SELECT substring_index(substring_index("1,2,3",',',2),',',-1)    # 返回结果:2
mysql> SELECT substring_index(substring_index("1,2,3",',',-2),',',1)    # 返回结果:2
mysql> SELECT substring_index(substring_index("1,2,3",',',3),',',-1)    # 返回结果:3
mysql> SELECT substring_index(substring_index("1,2,3",',',-2),',',-1)   # 返回结果:3

三、row_number、rank和dense_rank()

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/186840.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • java查询数据导出excel并返回给浏览器下载

    java查询数据导出excel并返回给浏览器下载效果图:1.点击导出表按钮2.接着就会出现下图3.点击上图中的确定按钮再接着就会出现下图4.点击上图中的保存按钮接着就会出现下图,浏览器下载完成后的提示5.打开下载好的文件如下图好了,废话不多少,上代码jsp前端代码<divstyle="height:30px;"> <a>时间:</a>…

  • Java实现判断闰年

    Java实现判断闰年Java实现闰年判断需求分析:年份如果满足以下两个条件中的其中一个则可将其年份判断位闰年一、能被4整除,但不能被100整除,就是闰年;二、能被400整除,也是闰年;需求实现方案一:使用if的嵌套实现packagecom.qingsu.basis;importjava.util.Scanner;publicclassProcessControl{ publicstaticvoidmain(String[]args){ //判断闰年 //1.能被4整除

  • 做了6年的Java,java简历包装项目经验[通俗易懂]

    高频问题1.上一家公司,你为什么会离职?公司很好,但是公司调整了业务,接下来的发展路线和自己的目标不一致,所以要换工作工作太清闲,学不到知识,我不怕累,就是想多锻炼自己,想找具有挑战力工作公司的管理制度不也是很完善,没有晋升机会,我比较想进步,找一个更好的平台我想去优秀的公司,让自己变得更好2.为什么来我们这里?对原单位充满感恩,这是我人生中非常重要的经历,我认同原单位领导和文化两份工作的本质是一致的,行业和工作性质都有紧密联系选择一份新的工作不代表背叛过去,发扬原公司魅力,同时为了

  • 常用的curl命令及参数详解

    前言:经常需要用到curl命令在线上机器中去测试接口,尤其是一些内外网接口、判断线上接口信息等,需要用到curl命令直接测试页面或接口返回值,下面是我常用的curl命令参数及作用:1、curl url作用:获取页面内容或接口响应示例:以爱奇艺视频页领取优惠券为例:curl https://act.vip.iqiyi.com/api/process.action?cb=cb_1540…

  • Java代码-Date转换

    Java代码-Date转换

  • 以太坊硬件钱包原理_以太坊区块链怎么挣钱

    以太坊硬件钱包原理_以太坊区块链怎么挣钱这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好!这是你第一次使用Markdown编辑器所展示的欢迎页。如果你想学习如何使用Mar

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号