HIVE SQL实现通过两字段不分前后顺序去重

c 复制代码
--数据建表
drop table if exists db.tb_name;
create table if not exists db.tb_name
( suj1 string
	,suj2 string
)
;

insert overwrite table db.tb_name
values 
("语文","数学")
,("语文","英语")
,("数学","语文")
,("物理","化学")
,("生物","物理")
,("化学","物理")
;

1.通过常规的分组排序/分组去重,该种方式去重时考虑了前后顺序,无法满足要求

1)分组排序

c 复制代码
select * from
(
select suj1
	,suj2
	,row_number() over (partition by suj1,suj2 order by 1 desc) rn
from 
db.tb_name
) t
where rn=1
;

2)分组

c 复制代码
select suj1,suj2
from 
db.tb_name
group by suj1,suj2
;

2.分组排序是将分组前后顺序统一

c 复制代码
select suj1,suj2 from
(
select suj1
	,suj2
	,row_number() over (partition by concat_ws(',',sort_array(split(concat(suj1,',',suj2),','))) order by 1 desc) as rn
from 
db.tb_name
) t
where rn=1
;

最终去重后输出的结果:

相关推荐
知识分享小能手1 小时前
mysql学习教程,从入门到精通,SQL DISTINCT 子句 (16)
大数据·开发语言·sql·学习·mysql·数据分析·数据库开发
人生百态,人生如梦3 小时前
大数据处理从零开始————3.Hadoop伪分布式和分布式搭建
hadoop·分布式
NaZiMeKiY7 小时前
SQLServer数据分页
数据库·sql·sqlserver
码爸7 小时前
java 执行es中的sql
java·sql·elasticsearch
中文很快乐8 小时前
springboot结合p6spy进行SQL监控
java·数据库·sql
666786668 小时前
Mysql高级篇(中)—— SQL优化
linux·运维·服务器·数据库·sql·mysql
知识分享小能手8 小时前
mysql学习教程,从入门到精通,SQL 删除数据(DELETE 语句)(19)
大数据·开发语言·数据库·sql·学习·mysql·数据开发
冰镇毛衣9 小时前
2.4 数据库表字段约束
数据库·sql·mysql
冰镇毛衣9 小时前
数据库简介
开发语言·数据库·sql·oracle
失心疯_202310 小时前
006.MySQL_查询数据
数据库·sql·mysql·关系型数据库·sqlyog·mysql教程·查询语句