postgresql----排序ORDER BY,分組GROUP BY,分頁OFFSET&&LIMIT


一.GROUP BY

使用GROUP BY分組查詢在SELECT子句中只能出現分組字段和聚合函數,HAVING子句相當於WHERE,使用條件過濾數據。

示例1.以a,b分組查詢tbl_insert表,且a大於5的行。

test=# select a,b,count(*) from tbl_insert group by a,b having a > 5;
 a | b | count 
---+---+-------
 7 | 7 |     4
 8 | 8 |     2
 6 | 6 |     3
(3 rows)

test=# select a,b,count(*) from tbl_insert where a > 5 group by a,b;
 a | b | count 
---+---+-------
 7 | 7 |     4
 8 | 8 |     2
 6 | 6 |     3
(3 rows)

 

示例2.以a,b分組查詢tbl_insert表,且a,b組合相同的行數大於2的a,b組合

test=# select a,b,count(*) from tbl_insert group by a,b having count(*) > 2;
 a | b | count 
---+---+-------
 7 | 7 |     4
 6 | 6 |     3
(2 rows)

 

示例3.以a,b分組查詢tbl_insert表,如果SELECT子句中包含其他字段,則ERROR。

test=# select a,b,c from tbl_insert group by a,b;
ERROR:  column "tbl_insert.c" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: select a,b,c from tbl_insert group by a,b;

 

二.ORDER BY

使用ORDER BY對結果集進行排序,默認使用ASC升序排列,可指定DESC降序排列。

示例1.查詢tbl_insert表按照a升序,c降序排列

test=# select * from tbl_insert where a > 6 order by a ,c desc;
 a | b |   c   
---+---+-------
 7 | 7 | abc
 7 | 7 | aBC
 7 | 7 | ABc
 7 | 7 | 3%1
 8 | 8 | 3_%_1
 8 | 8 | 3%_1
(6 rows)

 

示例2.以字段a,b分組查詢tbl_insert表,並按照各分組中行數降序排列。

test=# select a,b,count(*) from tbl_insert group by a,b order by count(*) desc;
 a | b | count 
---+---+-------
 7 | 7 |     4
 6 | 6 |     3
 8 | 8 |     2
 4 | 4 |     1
 5 | 5 |     1
 1 | 1 |     1
 3 | 3 |     1
 2 | 2 |     1
(8 rows)

 

三.LIMIT

使用LIMIT可以限制結果集的行數。

示例1.查詢tbl_insert表,並以a降序排列,只輸出前5行數據。

test=# select * from tbl_insert order by a desc limit 5;
 a | b |   c   
---+---+-------
 8 | 8 | 3_%_1
 8 | 8 | 3%_1
 7 | 7 | 3%1
 7 | 7 | ABc
 7 | 7 | abc
(5 rows)

 

四.OFFSET

使用OFFSET可以忽略前面的N行,與LIMIT結合使用可以實現分頁功能。

示例1.查詢tbl_insert表,並以a升序排列,前10行忽略不輸出。

 

test=# select * from tbl_insert order by a offset 10;
 a | b |   c   
---+---+-------
 7 | 7 | ABc
 7 | 7 | aBC
 8 | 8 | 3%_1
 8 | 8 | 3_%_1
(4 rows)

 

 

示例2.查詢tbl_insert表,並以a升序排列,實現分頁功能,每頁5行數據。

test=# select * from tbl_insert order by a offset 0 limit 5;
 a | b | c  
---+---+----
 1 | 1 | 11
 2 | 2 | 22
 3 | 3 | 33
 4 | 4 | 44
 5 | 5 | 51
(5 rows)

test=# select * from tbl_insert order by a offset 5 limit 5;
 a | b |  c  
---+---+-----
 6 | 6 | 661
 6 | 6 | 1
 6 | 6 | 61
 7 | 7 | 3%1
 7 | 7 | abc
(5 rows)

test=# select * from tbl_insert order by a offset 10 limit 5;
 a | b |   c   
---+---+-------
 7 | 7 | ABc
 7 | 7 | aBC
 8 | 8 | 3%_1
 8 | 8 | 3_%_1
(4 rows)

 

 

 

 

 


免責聲明!

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



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