关于order by的一些用法

1. order by 中关于null的处理

缺省处理:oracle在order by时认为null是最大值, 所以如果是asc升序则排在最后, desc降序则排在最前.

我们可以使用nulls first或者nulls last来控制null的位置

将null放在最前:select * from student order by name asc nulls first



将null放在最后:select * from student order by name desc nulls last



2. 几种排序的写法:

单列升序:select name from student order by name; (默认升序,即使不写asc)
单列降序:select name from student order by name desc;
多列升序:select id, name from student order by id, name;
多列混合排序:select id, name from student order by id desc, name asc; (先按id降序,如果id相同则按name升序)


3. 强制某列排第一:

select * from student order by decode(id, 3, 1, 2), id;   // id为3的值排第一



### SQL `GROUP BY` 和 `ORDER BY` 的正确用法 #### 使用场景与基本概念 在 SQL 查询中,`GROUP BY` 语句用于根据一个或多个列对结果集进行分组。通常会配合聚合函数(如 COUNT(), SUM() 等)来计算每组的相关统计数据[^1]。 而 `ORDER BY` 则是用来按照一列或多列的结果来进行排序操作,可以指定升序(ASC) 或者降序 (DESC)。 #### 基本语法结构 对于只含有 `GROUP BY` 的查询: ```sql SELECT column_name(s), aggregate_function(column_name) FROM table_name WHERE condition GROUP BY column_name; ``` 当同时使用 `GROUP BY` 和 `ORDER BY` 时,则应先执行分组再做排序处理: ```sql SELECT column_name(s), aggregate_function(column_name) FROM table_name WHERE condition GROUP BY column_name ORDER BY column_name [ASC|DESC]; ``` 如果还需要加入条件筛选某些特定的分组,则可以在 `GROUP BY` 后面加上 `HAVING` 子句[^2]: ```sql SELECT column_name(s), aggregate_function(column_name) FROM table_name WHERE condition GROUP BY column_name HAVING some_condition ORDER BY column_name [ASC|DESC]; ``` 这里需要注意的是,在标准 SQL 中,`ORDER BY` 应该总是位于整个 SELECT 语句的最后一部分;而且一旦有了 `GROUP BY`, 那么 `SELECT` 列表里除了被用来分组字段外就只能包含聚合表达式了[^3]。 #### 实际应用例子 假设有一个名为 orders 的订单表格,其中包含了客户 ID (`customer_id`)、产品名称(`product_name`) 及其价格 (`price`) 这样的信息。现在想要获取每位顾客购买商品总金额并按从高到低排列: ```sql SELECT customer_id, SUM(price) AS total_spent FROM orders GROUP BY customer_id ORDER BY total_spent DESC; ``` 此命令将会返回每个客户的消费总额,并且这些记录会被依据花费数额由大至小展示出来。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值