SQL中常見的三種去重方法

2022-09-19 13:57:12 字數 1398 閱讀 5265

在 mysql 中通常是使用 distinct 或 group by子句,但在支援視窗函式的 sql(如hive sql、oracle等等) 中還可以使用 row_number 視窗函式進行去重。

舉個栗子,現有這樣一張表 task:

備註:我們需要求出任務的總數量,因為 task_id 並非唯一的,所以需要去重:

--

列出 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 這兩條記錄不是重複值 。

--

列出 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() over (partition by 《用於分組的欄位名》 order by 《用於組內排序的欄位名》)其中 partition by 部分可省略。

--

在支援視窗函式的 sql 中使用

陣列去重三種常見方法

一 陣列去除重複物件 當物件中還有陣列或物件則不支援 param arr 轉換前的陣列,可能存在長虹複數句 return 不重複的陣列 export const getunique arr 1 把陣列元素作為物件的鍵存起來 這樣就算有重複的元素,也會相互替換掉 arr.foreach item ma...

陣列去重的三種方法

方法一 常規方法 思路 1.構建乙個新的陣列存放結果 2.for迴圈中每次從原陣列中取出乙個元素,用這個元素迴圈與結果陣列對比 3.若結果陣列中沒有該元素,則存到結果陣列中 物件導向,是乙個方法 array.prototype.unique1 function if repeat return re...

陣列去重的三種方法

var arr1 建立臨時陣列 var obj 建立空物件 for var i 0 i arr.length i return arr1 var arr 1,1,1,1,2,3,5,6,6,6 console.log unique arr var arr1 for var i 0 i arr.len...