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

查询最便宜彩色打印机制造商的SQL实现问题

嘿,这个问题我之前做类似需求时也卡过!要搞定找最便宜彩色打印机制造商的需求,关键就是先准确锁定价格最低的彩色打印机型号,再关联Product表拿到对应的制造商。给你两个实用的解决方案:

方案1:子查询先获取最低价格,再匹配关联

先算出所有彩色打印机里的最低价格,再用这个价格筛选对应的打印机型号,最后和Product表关联拿到制造商。SQL代码如下:

SELECT p.maker, pr.price
FROM Product p
JOIN Printer pr ON p.model = pr.model
WHERE pr.color = 'y'
AND pr.price = (SELECT MIN(price) FROM Printer WHERE color = 'y');

这个思路很直接:子查询先拿到彩色打印机的全局最低价格,外层查询筛选出价格等于这个最低值的彩色打印机记录,再通过model关联Product表得到制造商。如果有多个型号的价格都是最低值,这个语句会把所有对应的制造商都列出来,完全符合需求。

方案2:用窗口函数实现更灵活的筛选

如果后续可能有扩展需求(比如要找第二便宜的,或者按其他维度排序),窗口函数会更顺手。我们可以给彩色打印机按价格排序,标记出价格最低的记录,再筛选出来关联Product:

WITH RankedPrinters AS (
    SELECT 
        model, 
        price,
        RANK() OVER (ORDER BY price ASC) AS price_rank
    FROM Printer
    WHERE color = 'y'
)
SELECT p.maker, rp.price
FROM Product p
JOIN RankedPrinters rp ON p.model = rp.model
WHERE rp.price_rank = 1;

这里用RANK()函数的好处是,如果有多个打印机价格相同且都是最低,它们的price_rank都会是1,都会被选中;如果用ROW_NUMBER()的话,只会随机选其中一条(具体取决于数据库的默认排序规则),你可以根据实际需求选择合适的窗口函数。

顺便说下你之前遇到的问题根源:SQL里如果SELECT子句包含聚合函数(比如MIN(price)),其他非聚合列必须出现在GROUP BY子句里,但如果GROUP BY model,那MIN(price)就变成每个型号自己的最低价格,而不是全局的最低价格了,所以没法直接在同一句里同时拿到全局最低价格和对应的model,这就是为什么需要用子查询或者窗口函数来绕开这个限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:12:24