oracle 去除重復記錄的方法有:distinct:移除所有列值相同的重復行。group by:將相同值的行分組,僅返回一個代表行。row_number():為每一行分配唯一整數,用于標識并刪除重復行。還可以添加條件,僅移除符合特定條件的重復行,如 salary 值大于 5000。
oracle去除重復記錄的方法及添加條件
Oracle提供了幾種方法來去除重復記錄,包括 DISTINCT、GROUP BY 和 ROW_NUMBER()。
使用 DISTINCT
DISTINCT 運算符可從結果集中移除重復的行。它將根據所有列的值來判斷重復性。
SELECT DISTINCT column1, column2 FROM table_name;
登錄后復制
使用 GROUP BY
GROUP BY 運算符將具有相同值的行分組,并僅返回每個組中的一個代表行。
SELECT column1, column2 FROM table_name GROUP BY column1, column2;
登錄后復制
使用 ROW_NUMBER()
ROW_NUMBER() 函數為表中的每一行分配一個唯一的整數。我們可以使用該值來標識重復的行并將其刪除。
WITH CTE AS ( SELECT column1, column2, ROW_NUMBER() OVER (PARTITION BY column1, column2 ORDER BY id) AS row_num FROM table_name ) SELECT column1, column2 FROM CTE WHERE row_num = 1;
登錄后復制
添加條件
可以在上述方法中添加條件,以僅移除符合特定條件的重復行。例如,以下查詢使用 DISTINCT 來移除 salary 列值大于 5000 的重復行:
SELECT DISTINCT column1, column2 FROM table_name WHERE salary > 5000;
登錄后復制
同樣,我們可以使用 GROUP BY 和 HAVING 子句來移除滿足特定條件的重復組:
SELECT column1, column2 FROM table_name GROUP BY column1, column2 HAVING COUNT(*) > 1 AND SUM(salary) > 10000;
登錄后復制