SQL中常见的三种去重方法 |
您所在的位置:网站首页 › oracle中去重查询 › SQL中常见的三种去重方法 |
在 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_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_numberrow_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;
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |