跳到主要内容

607.销售员

序号题目难度
607题目链接简单

题目大意​

编写解决方案,找出没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。

以 任意顺序 返回结果表。

表: SalesPerson

Column NameType
sales_idint
namevarchar
salaryint
commission_rateint
hire_datedate

sales_id 是该表的主键列(具有唯一值的列)。 该表的每一行都显示了销售人员的姓名和 ID ,以及他们的工资、佣金率和雇佣日期。

表: Company

Column NameType
com_idint
namevarchar
cityvarchar

com_id 是该表的主键列(具有唯一值的列)。 该表的每一行都表示公司的名称和 ID ,以及公司所在的城市。

表: Orders

Column NameType
order_idint
order_datedate
com_idint
sales_idint
amountint

order_id 是该表的主键列(具有唯一值的列)。 com_id 是 Company 表中 com_id 的外键(reference 列)。 sales_id 是来自销售员表 sales_id 的外键(reference 列)。 该表的每一行包含一个订单的信息。这包括公司的 ID 、销售人员的 ID 、订单日期和支付的金额。

示例​

输入​

SalesPerson 表:

sales_idnamesalarycommission_ratehire_date
1John10000064/1/2006
2Amy1200055/1/2010
3Mark650001212/25/2008
4Pam25000251/1/2005
5Alex5000102/3/2007

Company 表:

com_idnamecity
1REDBoston
2ORANGENew York
3YELLOWBoston
4GREENAustin

Orders 表:

order_idorder_datecom_idsales_idamount
11/1/20143410000
22/1/2014455000
33/1/20141150000
44/1/20141425000

输出​

name
Amy
Mark
Alex

解释​

根据表 orders 中的订单 '3' 和 '4' ,容易看出只有 'John' 和 'Pam' 两个销售员曾经向公司 'RED' 销售过。 所以我们需要输出表 salesperson 中所有其他人的名字。

参考答案​

with a1 as(
select
t2.name
,sum(case when t3.name = 'RED' then 1 else 0 end) as red_cnt
from SalesPerson t2
left join Orders t1
on t1.sales_id = t2.sales_id
left join Company t3
on t1.com_id = t3.com_id
group by 1
having red_cnt = 0
)
select
name
from a1
;