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

如何从关联数据库查询各商品的最低单价?

解决每个已上架商品最低单价的SQL问题

嘿,这个问题很典型!你现在的SQL只返回一条结果,根源在于没对商品做分组——当你用MIN()这类聚合函数但没指定GROUP BY时,数据库会把所有匹配的行当成一个整体,自然只会算出全局的最低价,而不是每个商品自己的最低价。

方法一:用GROUP BY分组计算(最直接)

只需要给原SQL加上GROUP BY子句,指定按商品的唯一标识(id)和名称(product)分组,这样数据库就会为每个单独的商品计算最低单价:

SELECT 
    a.id AS id_product,
    a.product,
    MIN(b.price) AS price
FROM tb_product a
JOIN tb_product_store b ON b.id_product = a.id
WHERE a.active = 1
GROUP BY a.id, a.product  -- 核心:按商品维度分组,确保每个商品单独计算最低价
ORDER BY a.product;

执行这条SQL后,就能得到你预期的结果:每个已上架商品对应自己的最低单价。

方法二:用窗口函数(适合扩展需求)

如果之后你需要额外显示最低价对应的店铺信息,或者处理同商品多个店铺同价的场景,可以用窗口函数ROW_NUMBER()(或RANK())来实现:

WITH product_price_ranking AS (
    SELECT 
        a.id AS id_product,
        a.product,
        b.price,
        -- 按商品分组,给每个商品的价格按从低到高排序
        ROW_NUMBER() OVER (PARTITION BY a.id ORDER BY b.price ASC) AS price_rank
    FROM tb_product a
    JOIN tb_product_store b ON b.id_product = a.id
    WHERE a.active = 1
)
-- 只取每个商品的最低价(排名第一的记录)
SELECT id_product, product, price
FROM product_price_ranking
WHERE price_rank = 1
ORDER BY product;

小提示:如果同一个商品有多个店铺的价格都是最低价,用RANK()会返回所有同价的记录,而ROW_NUMBER()只会随机取其中一条,你可以根据需求选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:27:15