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
;

最终去重后输出的结果:

相关推荐
孤影过客17 分钟前
驯服数据巨兽:Hadoop如何重塑大数据的黄金时代
大数据·hadoop·分布式
Ricky_Theseus2 小时前
SQL Server 的五种约束类型
数据库·sql·oracle
极光代码工作室3 小时前
基于Hadoop的日志数据分析系统设计
大数据·hadoop·python·数据分析·数据可视化
沪漂阿龙7 小时前
深度解析SQL查询:从关联查询到子查询,一文掌握数据库核心技能
数据库·sql
Ricky_Theseus8 小时前
SQL Server2008 select语句基本语法
数据库·sql
淼淼爱喝水12 小时前
DVWA手动盲注SQL实验(详细教程)
数据库·sql·网络安全·oracle·dvwa
FL4m3Y4n1 天前
MySQL索引原理与SQL优化
android·sql·mysql
落日漫游1 天前
MySQL约束:6大核心机制详解
sql
不会写DN1 天前
GORM 实战入门:从环境搭建到企业级常用特性全解析
sql·mysql·go·gin