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
;

最终去重后输出的结果:

相关推荐
yumgpkpm2 小时前
Iceberg在Cloudera CDP集群详细操作步骤
大数据·人工智能·hive·zookeeper·spark·开源·cloudera
他是龙5512 小时前
43:SQL注入进阶(请求类型、方法与格式实战)
数据库·sql
小小测试开发4 小时前
SQL常用语法全解析:从入门到进阶的实战指南
数据库·sql
yumgpkpm4 小时前
Iceberg在Hadoop集群使用步骤(适配AI大模型)
大数据·hadoop·分布式·华为·zookeeper·开源·cloudera
Hello.Reader5 小时前
Flink SQL EXPLAIN “看懂计划”到“用 PLAN_ADVICE 调优”
大数据·sql·flink
榮十一9 小时前
10道SQL练习题及答案
数据库·sql·算法
Hns.9 小时前
MySQL慢SQL问题查找与优化方案
数据库·sql·mysql
清平乐的技术专栏9 小时前
Hive SQL中COALESCE 函数和NVL()函数、IFNULL函数区别
hive·hadoop·sql
爱吃大芒果9 小时前
Flutter 列表优化:ListView 性能调优与复杂列表实现
开发语言·hive·hadoop·flutter·华为
Hello.Reader9 小时前
Flink SQL 的 TRUNCATE 用法详解(Batch 模式)
sql·flink·batch