一.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)