本文整理自网络,侵删。
目录
- distinct
- group by
- row_number
在使用SQL提数的时候,常会遇到表内有重复值的时候,比如我们想得到 uv (独立访客),就需要做去重。
在 MySQL 中通常是使用 distinct 或 group by子句,但在支持窗口函数的 sql(如Hive SQL、Oracle等等) 中还可以使用 row_number 窗口函数进行去重。
举个栗子,现有这样一张表 task:
task_id | order_id | start_time |
---|---|---|
1 | 123 | 2020-01-05 |
1 | 213 | 2020-01-06 |
1 | 321 | 2020-01-07 |
2 | 456 | 2020-01-06 |
2 | 465 | 2020-01-07 |
3 | 798 | 2020-01-06 |
备注:
- task_id: 任务id;
- order_id: 订单id;
- start_time: 开始时间
注意:一个任务对应多条订单
我们需要求出任务的总数量,因为 task_id 并非唯一的,所以需要去重:
distinct
-- 列出 task_id 的所有唯一值(去重后的记录) -- select distinct task_id -- from Task; -- 任务总数 select count(distinct task_id) task_num from Task;
distinct 通常效率较低。它不适合用来展示去重后具体的值,一般与 count 配合用来计算条数。
相关阅读 >>
mssql和sqlite中关于if not exists 的写法
sqlserver探讨exec与sp_executesql的区别详解
sql server 分组统计并合计总数及with rollup应用
系统整理sql中group by的用法与group by多个字段限制
更多相关阅读请进入《sql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » SQL中的三种去重方法小结
标签:sql
相关推荐
评论
管理员已关闭评论功能...