MySQL查询:获取Agent John未达销售上限的活跃产品
筛选John未达销售上限的活跃产品查询语句
需求回顾
从PRODUCTS和SALES表中,找出Agent John对应的活跃产品里,销售数量未达到max_sales_required_per_agent上限的产品,同时返回该产品的已售数量与上限值。
正确MySQL查询语句
SELECT p.product_id, IFNULL(s.sold_count, 0) AS sold_quantity, p.max_sales_required_per_agent AS sales_upper_limit FROM PRODUCTS p LEFT JOIN ( SELECT product_id_sold, COUNT(*) AS sold_count FROM SALES WHERE agent_id = 'John' GROUP BY product_id_sold ) s ON p.product_id = s.product_id_sold WHERE p.status = 'active' AND IFNULL(s.sold_count, 0) < p.max_sales_required_per_agent;
语句说明
- 子查询先统计John每个产品的销售数量,避免重复计算
- 使用
LEFT JOIN确保即使John没有销售过某活跃产品(比如示例中的Pen),也能被纳入结果 IFNULL(s.sold_count, 0)把无销售记录的产品已售数量设为0,方便和上限值比较- 最后通过
WHERE条件筛选出活跃状态,且已售数量小于上限的产品
匹配示例结果
执行后会返回:
- Camera:已售2,上限11
- Pen:已售0,上限3
符合预期要求(Book已达上限、Laptop非活跃均被排除)
内容的提问来源于stack exchange,提问作者Tioman Island
相关产品推荐
相关产品推荐

