如何检索任意单日售出10种以上不同商品的门店?
解决任意单日售出10种以上不同商品的门店查询问题
问题核心
原SQL代码存在两个关键问题:
- 硬指定了单一日期,无法覆盖数据库中所有日期
- 错误使用了
inventory库存表,需求是查询售出的商品,应该基于记录实际交易的purchase表
修正后的SQL代码
SELECT DISTINCT s.sID, s.sName FROM store s JOIN ( SELECT p.sID, p.date FROM purchase p GROUP BY p.sID, p.date HAVING COUNT(DISTINCT p.pID) > 10 ) subquery ON s.sID = subquery.sID;
代码逻辑说明
- 覆盖所有日期:子查询按门店
sID和日期date分组,自动统计每家门店每一天的售出商品种类数,不再依赖固定日期 - 使用正确的数据表:
purchase表记录的是每笔售出交易,用它统计售出商品才符合需求,inventory是库存数据,和售出行为无关 - 去重门店:外层加
DISTINCT是为了避免同一个门店因多个日期符合条件而重复出现,如果需要查看每个门店的所有达标日期,可以去掉DISTINCT,并在SELECT里加上subquery.date
可选:显示达标日期的扩展写法
如果需要同时看到门店符合条件的具体日期,用下面的代码:
SELECT s.sID, s.sName, subquery.date FROM store s JOIN ( SELECT p.sID, p.date FROM purchase p GROUP BY p.sID, p.date HAVING COUNT(DISTINCT p.pID) > 10 ) subquery ON s.sID = subquery.sID ORDER BY s.sID, subquery.date;
内容的提问来源于stack exchange,提问作者Paradoxac
相关产品推荐
相关产品推荐

