SQL去重的三种方法汇总
创作时间:
作者:
@小白创作中心
SQL去重的三种方法汇总
引用
CSDN
1.
https://blog.csdn.net/u012955829/article/details/139457418
在使用SQL进行数据查询时,经常会遇到需要去除重复值的情况,比如计算独立访客(UV)时就需要对数据进行去重处理。在MySQL中,通常使用
distinct
或group by
子句来实现去重,而在支持窗口函数的SQL(如Hive SQL、Oracle等)中,还可以使用row_number
窗口函数进行去重。本文将详细介绍这三种去重方法。
假设有一张名为task
的表,结构如下:
其中:
task_id
:任务IDorder_id
:订单IDstart_time
:开始时间
注意:一个任务可能对应多条订单记录。我们需要求出任务的总数量,但由于task_id
并非唯一,因此需要进行去重处理。
distinct方法
-- 列出所有唯一的task_id值(去重后的记录)
-- select distinct task_id
-- from Task;
-- 任务总数
select count(distinct task_id) task_num
from Task;
distinct
通常效率较低,不适合用来展示去重后的具体值,一般与count
配合使用来计算条数。使用时,distinct
放在select
后,对后面所有字段的值进行统一去重。例如,如果distinct
后面有两个字段,那么1,1
和1,2
这两条记录不会被视为重复值。
group by方法
-- 列出所有唯一的task_id值(去重后的记录,包括null值)
-- select task_id
-- from Task
-- group by task_id;
-- 任务总数
select count(task_id) task_num
from (select task_id
from Task
group by task_id) tmp;
row_number窗口函数方法
row_number
是窗口函数,其语法如下:row_number() over (partition by <用于分组的字段名> order by <用于组内排序的字段名>)
其中partition by
部分可以省略。
-- 在支持窗口函数的SQL中使用
select count(case when rn=1 then task_id else null end) task_num
from (select task_id
, row_number() over (partition by task_id order by start_time) rn
from Task) tmp;
为了更好地理解distinct
和group by
在去重中的使用,我们再借助一张名为test
的表进行说明:
-- 下方的分号;用来分隔行
select distinct user_id
from Test; -- 返回 1; 2
select distinct user_id, user_type
from Test; -- 返回1, 1; 1, 2; 2, 1
select user_id
from Test
group by user_id; -- 返回1; 2
select user_id, user_type
from Test
group by user_id, user_type; -- 返回1, 1; 1, 2; 2, 1
select user_id, user_type
from Test
group by user_id;
-- Hive、Oracle等会报错,mysql可以这样写。
-- 返回1, 1 或 1, 2 ; 2, 1(共两行)。只会对group by后面的字段去重,就是说最后返回的记录数等于上一段sql的记录数,即2条
-- 没有放在group by 后面但是在select中放了的字段,只会返回一条记录(好像通常是第一条,应该是没有规律的)
通过这些示例,我们可以清晰地看到distinct
和group by
在去重时的具体行为和差异。
热门推荐
中国投资柬埔寨运河项目:区域繁荣的绿色纽带与未来展望
“上有热下有寒”怎么办?中医专家推荐6种调理法
“上热下寒”怎么办?中医六法助你疏通调理
上热下寒怎么办?中医6种方法助你恢复阴阳平衡
中焦堵塞致“上热下寒”,中医综合疗法助调理
冰雪游玩必备:冰面安全指南
冬季滑冰季,小心冰窟窿陷阱!
冬季冰窟窿自救指南:这些关键步骤要记牢
冬季冰面防溺水,这些自救技巧你知道吗?
维生素C+E护肤指南:美白保湿双管齐下,冬季也能拥有水润肌
社交平台上的“雷区”:抱怨、炫耀、传谣为何要不得
在土耳其遇见“天辰蓝”:中国企业在“一带一路”上的卓越实践
外媒:中国或成2025年全球增长、创新与可持续发展核心驱动力
出口提速!世界共享中国机遇 我国外贸“朋友圈”不断扩容
安代舞:蒙古族文化的瑰宝
蒙古族姑娘的穿搭秘密:传统与时尚的完美融合
为什么中国的中产阶层更焦虑?
冬季长跑:告别坏情绪,跑出好心情
从牛顿图案到银灰苹果:乔布斯如何塑造苹果标志
一个被咬的苹果,如何成为全球最具价值品牌符号?
极简至上:乔布斯如何用设计哲学重塑苹果LOGO
呼伦贝尔避暑胜地,夏日清凉之旅
呼伦贝尔冰雪那达慕:零下50℃里的热情盛宴
呼伦贝尔冬季冰雪游,你准备好了吗?
君子兰用什么肥料最好
君子兰用什么肥料最好
盆栽花卉养护全攻略:从浇水到病虫害防治
中华恐龙园春节光影艺术节全攻略:门票、活动、住宿一文搞定
春节打卡“东方侏罗纪”:中华恐龙园游玩全攻略
春节带娃打卡中华恐龙园,亲子游必备攻略