如何通过原生SQL筛选曾全部指定产品有库存的店铺?
解决方案:用原生SQL筛选曾经全量拥有指定产品库存的店铺
当然可以用原生SQL搞定这个需求,完全不用导出到Excel折腾!咱们直接针对你的需求来写查询:
核心思路
你需要找出曾经分别拥有Product1到Product5全部产品库存的店铺,关键是确认每个店铺都有过这5个产品的Stocked=TRUE记录(不管是不是同一时间点)。
完整SQL语句
假设你的表名为inventory_checks,替换成你实际的表名即可:
SELECT Shop, TRUE AS Stocked FROM inventory_checks WHERE -- 限定只检查指定的5个产品 Product IN ('Product1', 'Product2', 'Product3', 'Product4', 'Product5') -- 只统计曾经有库存的记录 AND Stocked = TRUE GROUP BY Shop -- 确保该店铺覆盖了所有5个指定产品 HAVING COUNT(DISTINCT Product) = 5;
语句拆解
WHERE子句:先过滤掉无关产品和无库存的记录,只保留我们关心的有效数据;GROUP BY Shop:按店铺分组,把同一店铺的所有记录聚合到一起;HAVING COUNT(DISTINCT Product) = 5:用COUNT(DISTINCT)统计该店铺拥有过的不同指定产品数量,等于5就说明这5个产品曾经都有过库存(用DISTINCT是为了避免同一产品多次被计数,比如某店铺多次检查Product1都有库存,只会算1次)。
验证你的示例数据
用你给出的测试数据跑这个查询,结果正好是:
| Shop | Stocked |
|---|---|
| Shop2 | TRUE |
完全符合你的期望!
如果以后需要调整指定产品列表,只需要修改IN括号里的产品名称,同时把HAVING后的数字改成对应产品数量就行,非常灵活。
内容的提问来源于stack exchange,提问作者HDCerberus
相关产品推荐
相关产品推荐

