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

SQL分组查询实现无重复ISBN并获取对应最低价格记录的方法

你原有SQL的问题在于,GROUP BY isbn后直接SELECT *不符合SQL执行逻辑,只能随机取每个ISBN分组下的任意一条记录,无法保证取到价格最低的条目,且分组后再排序的逻辑也不解决分组内取最小值的需求。

要保留你用到的OR筛选条件,可按以下两种方案实现:

方案1:支持窗口函数的数据库(MySQL8.0+、PostgreSQL、SQL Server等适用)

SELECT isbn, price, supplier
FROM (
    SELECT *,
        ROW_NUMBER() OVER (PARTITION BY isbn ORDER BY price ASC) AS rank_num
    FROM `table`
    WHERE isbn = 4000 OR isbn = 4001 OR isbn = 4003
) AS temp_table
WHERE rank_num = 1;

说明:内层查询保留了你原有OR筛选逻辑,用PARTITION BY isbn按ISBN分组,每组内按价格升序排序后给行号,行号为1的就是该ISBN价格最低的记录。如果同一ISBN有多条相同最低价格的记录需要全部返回,把ROW_NUMBER替换为RANK()即可。

方案2:兼容低版本MySQL的写法

SELECT t1.*
FROM `table` t1
INNER JOIN (
    SELECT isbn, MIN(price) AS lowest_price
    FROM `table`
    WHERE isbn = 4000 OR isbn = 4001 OR isbn = 4003
    GROUP BY isbn
) t2 ON t1.isbn = t2.isbn AND t1.price = t2.lowest_price;

说明:先通过子查询拿到每个ISBN的最低价格,再关联原表匹配对应完整记录,内层WHERE条件保留了你原有OR的写法,符合你的要求。

按你提供的示例数据,两种方案最终返回的结果均为:

isbnpricesupplier
400019.99companyB
400133.50companyA
400311.99companyB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:18:02