PgSQL——学习笔记八: ORDER BY 子句:排序 & GROUP BY 语句:分组

PostgreSQL ORDER BY 语句:对一列或多列数据进行升序(ASC)或降序(DESC)排列。

在 PostgreSQL 中,ORDER BY 用于对一列或者多列数据进行升序(ASC)或者降序(DESC)排列。

//ORDER BY 子句的基础语法如下:
SELECT column-list
FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

您可以在 ORDER BY 中使用一列或者多列,但是必须保证要排序的列必须存在。
ASC 表示升序,DESC 表示降序。
实例:

mydb=# select * from COMPANY;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
  3 | Teddy |  23 | Norway                                             |  20000 |
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
(5 行记录)

//将对结果根据 AGE 字段值进行升序排列:
mydb=# SELECT * FROM COMPANY ORDER BY AGE ASC;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  3 | Teddy |  23 | Norway                                             |  20000 |
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
(5 行记录)

//将对结果根据 NAME 字段值和 SALARY 字段值进行升序排序:
mydb=# SELECT * FROM COMPANY ORDER BY NAME, SALARY ASC;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
  3 | Teddy |  23 | Norway                                             |  20000 |
(5 行记录)

//将对结果根据NAME字段值进行降序排列:
mydb=# SELECT * FROM COMPANY ORDER BY NAME DESC;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  3 | Teddy |  23 | Norway                                             |  20000 |
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
(5 行记录)

PostgreSQL GROUP BY 语句:与SELECT 语句一起使用,对相同的数据进行分组

在 PostgreSQL 中,GROUP BY 语句和 SELECT 语句一起使用,用来对相同的数据进行分组。
注意:GROUP BY 在一个 SELECT 语句中,放在 WHRER 子句的后面,ORDER BY 子句的前面。

//下面给出了 GROUP BY 子句的基本语法:
SELECT column-list
FROM table_name
WHERE [ conditions ]
GROUP BY column1, column2....columnN
ORDER BY column1, column2....columnN

注意:GROUP BY 子句必须放在 WHERE 子句中的条件之后,必须放在 ORDER BY 子句之前。
在 GROUP BY 子句中,你可以对一列或者多列进行分组,但是被分组的列必须存在于列清单中。

mydb=# select * from COMPANY;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
  3 | Teddy |  23 | Norway                                             |  20000 |
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
(5 行记录)

//将根据 NAME 字段值进行分组,找出每个人的工资总额:
mydb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
 name  |  sum
-------+-------
 Teddy | 20000
 David | 85000
 Paul  | 20000
 Mark  | 65000
 Allen |
(5 行记录)

//在 CAMPANY 表中添加几条记录后:
mydb=# select * from COMPANY;
 id | name  | age |                      address                       | salary | join_date
----+-------+-----+----------------------------------------------------+--------+------------
  4 | Mark  |  25 | Rich-Mond                                          |  65000 | 2007-12-13
  5 | David |  27 | Texas                                              |  85000 | 2007-12-13
  3 | Teddy |  23 | Norway                                             |  20000 |
  2 | Allen |  25 | Texas                                              |        | 2007-12-13
  1 | Paul  |  32 | California                                         |  20000 | 2001-07-13
  8 | Paul  |  24 | Houston                                            |  20000 |
  6 | pasl  |  24 | Hou                                                |  20000 |
  7 | lili  |  23 | hy                                                 |  10000 |
  9 | James |  44 | Norway                                             |   5000 |
 10 | James |  45 | Texas                                              |   5000 |
(10 行记录)

//根据 NAME 字段值进行分组,找出每个客户的工资总额:
mydb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME;
 name  |  sum
-------+-------
 Teddy | 20000
 lili  | 10000
 pasl  | 20000
 David | 85000
 Paul  | 40000
 Mark  | 65000
 Allen |
 James | 10000
(8 行记录)

//将 ORDER BY 子句与 GROUP BY 子句一起使用:
mydb=# SELECT NAME, SUM(SALARY) FROM COMPANY GROUP BY NAME ORDER BY sum ASC;
 name  |  sum
-------+-------
 lili  | 10000
 James | 10000
 Teddy | 20000
 pasl  | 20000
 Paul  | 40000
 Mark  | 65000
 David | 85000
 Allen |
(8 行记录)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL 中,GROUP BY 语句和 SELECT 语句可以一起使用来对相同的数据进行分组GROUP BY 通常放在 WHERE 子句之后和 ORDER BY 子句之前。 下面是 GROUP BY 与 ORDER BY 一起使用的基本语法: SELECT column-list FROM table_name WHERE [ conditions ] GROUP BY column1, column2....columnN ORDER BY column1, column2....columnN 这个语法允许你按照指定的列对结果进行分组,然后按照指定的列对分组结果进行排序。 需要注意的是,如果一个查询中使用了分组函数,那么任何不在分组函数中的列或表达式都必须在 GROUP BY 子句中出现,否则会出错。例如,如果在一个查询中使用了 SUM 函数来计算某列的总和,那么该列必须在 GROUP BY 子句中列出。否则,会出现错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [PgSQL——学习笔记ORDER BY 子句排序 & GROUP BY 语句分组](https://blog.csdn.net/qq_41361442/article/details/124809777)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [group by,having,order by的用法详解](https://download.csdn.net/download/weixin_38543460/13699445)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值