SQL65 按照数量和价格排序

文章提供了一个SQL语句示例,该语句用于从OrderItems表中提取quantity和item_price列,并按照数量降序和价格降序进行排序。示例数据包括三个条目,排序后返回的结果首先显示数量最多的项,然后是价格最高的项。

描述

假设有一个OrderItems表

quantity

item_price

1

100

10

1003

2

500

【问题】

编写 SQL 语句,显示 OrderItems 表中的数量(quantity)和价格(item_price),并按数量由多到少、价格由高到低排序。

【示例答案】

返回quantity和item_price

示例1

输入:

DROP TABLE IF EXISTS `OrderItems`;

CREATE TABLE IF NOT EXISTS `OrderItems` (

`quantity` INT(64) NOT NULL COMMENT '数量',

`item_price` INT(64) NOT NULL COMMENT '订单价格'

);

INSERT INTO `OrderItems` VALUES (1,100),

(10,1003),

(2,500);

复制

输出:

10|1003

2|500

1|100

答案

select quantity,item_price from OrderItems t1 order by quantity desc,item_price desc

### SQL 按两个字段倒序排序的语法示例 在SQL中,`ORDER BY` 子句支持按照多个字段进行排序,并且可以分别为每个字段指定升序 (`ASC`) 或降序 (`DESC`) 排序方式。默认情况下,如果未显式声明 `ASC` 或 `DESC`,则会使用升序排序。 #### 语法 以下是按两个字段进行倒序排序的标准语法: ```sql SELECT column1, column2, ... FROM table_name ORDER BY field1 DESC, field2 DESC; ``` 在此语法规则中: - `field1` `field2` 是要排序的字段名称。 - 使用 `DESC` 关键字表示这两个字段都将以降序方式进行排序[^1]。 #### 示例 假设有一个名为 `employees` 的表格,其中包含以下字段:`employee_id`, `last_name`, `hire_date`。现在希望先按 `hire_date` 倒序排列员工入职日期,再按 `last_name` 倒序排列姓名: ```sql SELECT employee_id, last_name, hire_date FROM employees ORDER BY hire_date DESC, last_name DESC; ``` 此查询的结果将是基于最新入职时间优先显示的记录列表,在相同入职日期的情况下,则进一步依据姓氏字母顺序从大到小排列[^2]。 对于更复杂的场景,比如处理含有空值的情况,还可以利用 `NULLS FIRST | NULLS LAST` 来控制空值的位置。例如下面的例子展示了当存在可能为空的字段时如何调整它们相对于非空条目的位置: ```sql SELECT * FROM products ORDER BY price DESC NULLS LAST, stock_quantity DESC NULLS LAST; ``` 这里假定我们正在管理产品库存表单(`products`)中的商品价格(price)以及存货数量(stock_quantity),并期望高价商品首先展示出来,同时忽略掉那些既无定价也无库存的商品直到最后才考虑他们。 另外值得注意的是,虽然本解答主要讨论标准SQL行为,但在特定数据库系统里可能会有细微差异或者额外功能扩展,请参照具体DBMS文档获取最精确的信息[^3]。 ### 数据筛选实例 (附加说明) 为了提供更加直观的理解过程,我们可以参考 Pandas DataFrame 类似操作来类比解释这种多条件下的逆向排序逻辑。例如在一个 Iris 花卉数据集中寻找花瓣长度(petal_length)最长并且种类(class)为 'virginica' 的前几项记录可写成如下形式: ```python import pandas as pd df = pd.read_csv('iris.csv') result_df = df[df['class'] == 'virginica'].sort_values(by=['petal_length', 'sepal_width'], ascending=[False, False]).head() print(result_df) ``` 这段Python代码片段实现了同样的目标——即针对分类标签等于 "virginica" 的子集合执行双重维度上的递减次序整理动作[^4]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值