SQL去重方法有哪些
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家分享的是有关SQL去重方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立
千家信息网最后更新 2025年11月07日SQL去重方法有哪些
这篇文章给大家分享的是有关SQL去重方法有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立访客),就需要做去重。
在 MySQL 中通常是使用 distinct 或 group by子句,但在支持窗口函数的 sql(如Hive SQL、Oracle等等) 中还可以使用 row_number 窗口函数进行去重。
举个栗子,现有这样一张表 task:

备注:
task_id: 任务id;order_id: 订单id;start_time: 开始时间
注意:一个任务对应多条订单
我们需要求出任务的总数量,因为 task_id 并非唯一的,所以需要去重:
distinct
-- 列出 task_id 的所有唯一值(去重后的记录)select distinct task_idfrom Task;-- 任务总数select count(distinct task_id) task_numfrom 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_numfrom (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_numfrom (select task_id , row_number() over (partition by task_id order by start_time) rn from Task) tmp;
此外,再借助一个表 test 来理理 distinct 和 group by 在去重中的使用:

-- 下方的分号;用来分隔行select distinct user_idfrom Test; -- 返回 1; 2select distinct user_id, user_typefrom Test; -- 返回1, 1; 1, 2; 2, 1select user_idfrom Testgroup by user_id; -- 返回1; 2select user_id, user_typefrom Testgroup by user_id, user_type; -- 返回1, 1; 1, 2; 2, 1select user_id, user_typefrom Testgroup by user_id; -- Hive、Oracle等会报错,mysql可以这样写。-- 返回1, 1 或 1, 2 ; 2, 1(共两行)。只会对group by后面的字段去重,就是说最后返回的记录数等于上一段sql的记录数,即2条-- 没有放在group by 后面但是在select中放了的字段,只会返回一条记录(好像通常是第一条,应该是没有规律的)
感谢各位的阅读!关于"SQL去重方法有哪些"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
任务
函数
字段
方法
内容
总数
时候
更多
篇文章
订单
支持
不错
实用
两个
中放
分号
备注
多条
子句
就是
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网云服务器市场份额
淮安在线联想服务器维修电话
方舟服务器上传的角色不见了
c 建立服务器
系统开发的大概步骤 数据库
常州个人软件开发销售
棋牌app服务器多少钱一个月
济南企业办公软件开发公司
鹿泉区新时代软件开发服务装饰
工控机 服务器
服务器中级防护
csgo为什么总是连接不到服务器
服务器总有c盘安装的程序
天津南服务器
绯石之心服务器第一要多少钱
多盟智胜网络技术有限公司电话
手机上有数据库的软件吗
数据库中什么是默认创建
网络安全与自身息息相关
北京oa软件开发java
计算机网络技术 考点
不属于书目 目次 数据库
数据库管理系统主键在哪
数据库配置和监听
网络安全不止红蓝
电子科学与技术学习软件开发
数据库课程设计怎么做公交系统
兰州 ibm 服务器
福州卓越无限软件开发
js 数据库变化通知