postgresql之distinct用法


1. 去重;關鍵字distinct去重功能  在其他數據庫(oracle,mysql)是存在;當然postgresql也有這個功能

[postgres@sdserver40_210 ~]$ psql mydb lottu
psql (9.5.0)
Type "help" for help.

mydb=> select * from trade;
 tradeno | accountid  | fee | game_id 
---------+------------+-----+---------
 1000006 | yyb_100001 |  10 |    2555
 1000011 | yyb_100002 | 100 |    2555
 1001859 | yyb_100001 |  10 |    2555
 1001861 | yyb_100003 |  20 |    2555
 1001854 | yyb_100004 |   6 |    2555
 1001881 | yyb_100002 | 328 |    2555
(6 rows)

mydb=> select distinct accountid from trade;
 accountid  
------------
 yyb_100001
 yyb_100004
 yyb_100002
 yyb_100003
(4 rows)

mydb=> select distinct accountid,game_id from trade;
 accountid  | game_id 
------------+---------
 yyb_100001 |    2555
 yyb_100003 |    2555
 yyb_100004 |    2555
 yyb_100002 |    2555
(4 rows)
2. 跟on一起用; 使用DISTINCT ON實現用窗口函數實現的取第一名的功能
    這個功能oracle,mysql是沒有的;當然它們有其他的分析函數可以替換;頂替;例如row_number, fisrt_values等等
mydb=> select distinct on (accountid) accountid,fee from trade;
 accountid  | fee 
------------+-----
 yyb_100001 |  10
 yyb_100002 | 100
 yyb_100003 |  20
 yyb_100004 |   6
(4 rows)

mydb=> select distinct on (game_id) accountid,fee from trade;
 accountid  | fee 
------------+-----
 yyb_100001 |  10
(1 row)

mydb=> select distinct on (game_id) accountid,fee from trade order by game_id, fee desc;
 accountid  | fee 
------------+-----
 yyb_100002 | 328
(1 row)

--例如取每個帳號充值最大的一筆
mydb=> select distinct on (accountid) accountid,fee from trade order by accountid, fee desc;
 accountid  | fee 
------------+-----
 yyb_100001 |  10
 yyb_100002 | 328
 yyb_100003 |  20
 yyb_100004 |   6
(4 rows)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM