1. 程式人生 > 資料庫 >PostgreSQL 實現distinct關鍵字給單獨的幾列去重

PostgreSQL 實現distinct關鍵字給單獨的幾列去重

PostgreSQL去重問題一直困擾著我,distinct和group by遠不如MySQL用起來隨便,但是如果掌握了規律,還是和MySQL差不多的

主要介紹的是distinct關鍵字

PostgreSQL 實現distinct關鍵字給單獨的幾列去重

select distinct id,name,sex,age from student

假如有一張student表,欄位如上圖,我查詢student表中所有資訊用distinct去重(上面的SQL語句),pgsql就會根據所有的欄位通過演算法取得重複行的第一行,但是很明顯,ID這個欄位我在設計的時候不會讓它重複,所以相當於沒有去重

我想只根據name和age去重怎麼辦?

可以這麼寫

select distinct on (name,age) id,age from student

這樣就會只根據name和age去重了

總結一下:

distinct on (),括號裡面的內容是要去重的列,括號外面的內容是你要查詢展示的列,兩者沒有關係,你可以根據某些列去重不必將他們查詢出來,最後這個舉一個例子就是:

我要查詢name和age,根據name和sex去重:

select distinct on (name,sex) name,age from student

補充:PostgreSQL按照某一欄位去重,並顯示其他欄位資訊

以前遇到去重的地方更多的是MySQL去重後統計,比如select count(distinct 欄位) from 表,後來臨時遇到用Postgresql查詢全部資訊,但要對某個欄位去重,查資料發現select * from table group by 要去重的欄位,在MySQL上可以用,就搬到Postgresql試一下發現不行,又Google一番,終於找到一種方案:select distinct on(欄位) * from 表,就可以了。

如下圖:

PostgreSQL 實現distinct關鍵字給單獨的幾列去重

對name欄位去重後再查詢全部欄位:

PostgreSQL 實現distinct關鍵字給單獨的幾列去重

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。