LeetCode 1251平均售价问题:SQL代码仅通过15/17测试用例求助
问题原因及修正方案
你的代码只通过15/17测试用例的核心原因是:使用了INNER JOIN,漏掉了有价格记录但无销售记录的产品。题目要求返回所有存在价格记录的产品的平均售价,哪怕该产品从未卖出(此时平均售价应为0.00),但INNER JOIN会过滤掉这些在UnitsSold表中没有匹配项的产品。
修正后的代码
SELECT p.product_id, ROUND(COALESCE(SUM(price * units) / NULLIF(SUM(units), 0), 0), 2) AS average_price FROM Prices p LEFT JOIN UnitsSold u ON u.product_id = p.product_id AND u.purchase_date BETWEEN p.start_date AND p.end_date GROUP BY p.product_id;
关键修正点
- 将
JOIN(即INNER JOIN)替换为LEFT JOIN:确保Prices表中的所有产品都被保留,即使UnitsSold表中没有对应的销售记录 - 其余逻辑保持不变:对于无销售记录的产品,
SUM(price * units)和SUM(units)都会返回NULL,NULLIF(SUM(units), 0)仍为NULL,COALESCE会将整个表达式结果转为0,最终ROUND(0,2)得到0.00,符合题目要求
内容的提问来源于stack exchange,提问作者NotVS
相关产品推荐
相关产品推荐

