在 mysql 中通常是使用 distinct 或 group by子句,但在支援視窗函式的 sql(如hive sql、oracle等等) 中還可以使用 row_number 視窗函式進行去重。
舉個栗子,現有這樣一張表 task:
備註:我們需要求出任務的總數量,因為 task_id 並非唯一的,所以需要去重:
--distinct 通常效率較低。它不適合用來展示去重後具體的值,一般與 count 配合用來計算條數。列出 task_id 的所有唯一值(去重後的記錄)
--select distinct task_id
--from task;
--任務總數
select
count(distinct
task_id) task_num
from task;
distinct 使用中,放在 select 後邊,對後面所有的字段的值統一進行去重。比如distinct後面有兩個字段,那麼 1,1 和 1,2 這兩條記錄不是重複值 。
--row_number 是視窗函式,語法如下:列出 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() 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...