SQL查询问题:如何从单价最高的前5个产品中取单价最低的前3个
SQL查询实现方案
你可以将已有的查询作为子查询嵌套在外层查询中即可,注意子查询需要设置别名才能被外层调用,完整语句如下:
SELECT TOP 3 * FROM ( -- 你原有逻辑:取全表单价最高的5个产品 SELECT TOP 5 * FROM Products ORDER BY UnitPrice DESC ) AS Top5HighPriceProducts -- 对前5个产品按单价升序,取价格最低的前3个 ORDER BY UnitPrice ASC
逻辑说明
- 内层子查询直接复用你已经验证过的逻辑,返回全表UnitPrice最高的5条产品记录
- 外层查询仅针对内层返回的5条数据做处理,按UnitPrice升序排序后取前3条,刚好符合你要的“前5高里的前3低”的需求
其他数据库兼容写法
如果你使用的是MySQL、PostgreSQL等不支持TOP关键字的数据库,可以替换为LIMIT实现,语句如下:
SELECT * FROM ( SELECT * FROM Products ORDER BY UnitPrice DESC LIMIT 5 ) AS Top5HighPriceProducts ORDER BY UnitPrice ASC LIMIT 3
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

