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

select distinct id,name,sex,age from student
假如有一張student表,字段如上圖,我查詢student表中所有信息用distinct去重(上面的SQL語句),pgsql就會根據所有的字段通過算法取得重復行的第一行,但是很明顯,ID這個字段我在設計的時候不會讓它重復,所以相當于沒有去重
我想只根據name和age去重怎么辦?
可以這么寫
select distinct on (name,age) id,name,sex,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 表,就可以了。
如下圖:

對name字段去重后再查詢全部字段:

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- postgresql rank() over, dense_rank(), row_number()用法區別
- Postgresql去重函數distinct的用法說明
- postgreSQL中的row_number() 與distinct用法說明