• 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)

     

  • 相关阅读:
    Vue —— 精讲 VueRouter( 2 )
    Vue —— 精讲 VueRouter(1)
    Vue —— 精讲 VueX (2)
    Vue —— 精讲 VueX (1)
    公司最近来了个实习生——我要哭了,同学们请收好你们的代码规范!!!!!代码不规范,同事两行泪
    NodeJS——大汇总(二)(只需要使用这些东西,就能处理80%以上业务需求,全网最全node解决方案,吐血整理)
    NodeJS——大汇总(一)(只需要使用这些东西,就能处理80%以上业务需求,全网最全node解决方案,吐血整理)
    Node教程——API接口开发(Node版的CRUD通用接口的搭建)(MangoDB+Express_Version2)
    Node教程——封装一个token验证器
    设计模式4
  • 原文地址:https://www.cnblogs.com/alianbog/p/5617884.html
Copyright © 2020-2023  润新知