基于给定数据库表结构,编写SQL查询获取有2笔及以上订单的销售员姓名
解决方案:找出拥有两笔或以上订单的销售员姓名
要搞定这个需求,核心思路就是统计每个销售员的订单数量,再筛选出订单数≥2的人。这里给你两种常用的实现方式,按需选择就行:
方法一:关联表后分组统计
这种方式直接把销售员表和订单表关联起来,分组后统计订单数,逻辑比较直观:
SELECT s.name FROM salesperson s JOIN `order` o ON s.sid = o.sid GROUP BY s.sid, s.name HAVING COUNT(o.oid) >= 2;
代码说明:
- 用
JOIN通过sid把salesperson和order表关联,确保每个销售员的订单都能对应上个人信息。 GROUP BY s.sid, s.name按销售员ID和姓名分组(用sid分组是为了避免同名销售员的统计误差,毕竟姓名可能重复,但sid是唯一标识)。HAVING COUNT(o.oid) >= 2筛选出订单数≥2的分组,统计oid(订单主键)的数量能准确反映真实订单数,避免重复订单的干扰。
方法二:子查询筛选符合条件的销售员ID
如果不想直接关联表,也可以先通过子查询找出符合订单数要求的销售员ID,再查询对应姓名:
SELECT name FROM salesperson WHERE sid IN ( SELECT sid FROM `order` GROUP BY sid HAVING COUNT(oid) >= 2 );
代码说明:
- 子查询先对
order表按sid分组,统计每个销售员的订单数,筛选出订单数≥2的sid列表。 - 外层查询用
IN关键字,从salesperson表中取出这些sid对应的销售员姓名。
⚠️ 注意:order是SQL的保留关键字,所以引用这个表名时必须用反引号(`)包裹,不然会触发语法错误。
内容的提问来源于stack exchange,提问作者Mayank Parihar
相关产品推荐
相关产品推荐

