You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL如何在同一查询中获取同列的最高2个与最低2个值

原SQL问题说明

你现有查询中使用GROUP BY price存在逻辑问题:如果多个商品定价相同,分组后只会返回其中一个商品的名称,无法拿到该价格下的所有商品。如果你的需求是「取价格最低的2款商品」,建议删除GROUP BY子句;如果是「取价格最低的2个不同价位对应的所有商品」,可以保留分组逻辑。

合并查询实现方案

通过UNION ALL拼接两个独立的子查询,即可在同一条SQL中同时返回最低、最高各2组结果,额外加的type字段用于区分结果类型,不需要可删除:

场景1:取价格最低/最高各2款商品(按排序取前2条,允许价格重复)

SELECT title, price, '最低价位' AS type
FROM products
ORDER BY price ASC 
LIMIT 2

UNION ALL

SELECT title, price, '最高价位' AS type
FROM products
ORDER BY price DESC 
LIMIT 2

场景2:取价格最低/最高各2个不同价位的所有商品(对应原SQL的分组逻辑)

如果你的数据库支持子查询使用LIMIT(如MySQL 8.0+、PostgreSQL等),可以用以下写法:

SELECT title, price, '最低价位' AS type
FROM products
WHERE price IN (
    SELECT DISTINCT price FROM products ORDER BY price ASC LIMIT 2
)

UNION ALL

SELECT title, price, '最高价位' AS type
FROM products
WHERE price IN (
    SELECT DISTINCT price FROM products ORDER BY price DESC LIMIT 2
)

如果使用不支持子查询LIMIT的低版本MySQL,可以替换为JOIN写法:

SELECT p.title, p.price, '最低价位' AS type
FROM products p
JOIN (SELECT DISTINCT price FROM products ORDER BY price ASC LIMIT 2) low_p ON p.price = low_p.price

UNION ALL

SELECT p.title, p.price, '最高价位' AS type
FROM products p
JOIN (SELECT DISTINCT price FROM products ORDER BY price DESC LIMIT 2) high_p ON p.price = high_p.price

注意事项

如果存在价格同时属于最低2个价位和最高2个价位的极端情况(比如表内只有2款商品),用UNION会自动去重,UNION ALL会保留两条重复结果,可以根据业务需求选择。

内容的提问来源于stack exchange,提问作者helix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 04:24:04