题目描述
(通过次数402 | 提交次数521,通过率77.16%)
表:Salesperson +----------------+---------+ | Column Name | Type | +----------------+---------+ | salesperson_id | int | | name | varchar | +----------------+---------+ sales_person_id 是这个表的主键。 这个表中的每一行都显示一个销售人员的 ID。 表:Customer +----------------+------+ | Column Name | Type | +----------------+------+ | customer_id | int | | salesperson_id | int | +----------------+------+ customer_id 是这个表的主键。 salesperson_id 是一个来自于 Salesperson 表的外键 Customer 表中的每一行都显示了一个客户的 ID 和销售人员的 ID。 表:Sales +-------------+------+ | Column Name | Type | +-------------+------+ | sale_id | int | | customer_id | int | | price | int | +-------------+------+ sale_id 是这个表的主键。 customer_id 是一个来自于 Customer 表的外键。 Sales 表中的每一行都显示了一个客户的 ID 以及他们在 sale_id 指代的交易中所支付的金额。 编写一个 SQL 查询用来报告每个销售人员的客户所支付的价格总和。如果销售人员没有任何客户,则总值应该为 0 。 以 任意顺序 返回结果表。 查询结果格式如下所示。 示例 1: 输入: Salesperson 表: +----------------+-------+ | salesperson_id | name | +----------------+-------+ | 1 | Alice | | 2 | Bob | | 3 | Jerry | +----------------+-------+ Customer 表: +-------------+----------------+ | customer_id | salesperson_id | +-------------+----------------+ | 1 | 1 | | 2 | 1 | | 3 | 2 | +-------------+----------------+ Sales 表: +---------+-------------+-------+ | sale_id | customer_id | price | +---------+-------------+-------+ | 1 | 2 | 892 | | 2 | 1 | 354 | | 3 | 3 | 988 | | 4 | 3 | 856 | +---------+-------------+-------+ 输出: +----------------+-------+-------+ | salesperson_id | name | total | +----------------+-------+-------+ | 1 | Alice | 1246 | | 2 | Bob | 1844 | | 3 | Jerry | 0 | +----------------+-------+-------+ 解释: Alice 是客户 1 和客户 2 的销售人员。 - 客户 1 一次购买花费了 354。 - 客户 2 一次购买花费了 892。 Alice 的总数是 354 + 892 = 1246。 Bob 是客户 3 的销售人员。 - 客户 3 一次购买花费了 988,另一次购买花费了 856。 Bob 的总数是 988 + 856 = 1844。 Jerry 没有客户。 Jerry 的总数是 0。 来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/calculate-the-influence-of-each-salesperson
//测试数据 Create table If Not Exists Salesperson (salesperson_id int, name varchar(30)); Create table If Not Exists Customer (customer_id int, salesperson_id int); Create table If Not Exists Sales (sale_id int, customer_id int, price int); insert into Salesperson (salesperson_id, name) values ('1', 'Alice'); insert into Salesperson (salesperson_id, name) values ('2', 'Bob'); insert into Salesperson (salesperson_id, name) values ('3', 'Jerry'); insert into Customer (customer_id, salesperson_id) values ('1', '1'); insert into Customer (customer_id, salesperson_id) values ('2', '1'); insert into Customer (customer_id, salesperson_id) values ('3', '2'); insert into Sales (sale_id, customer_id, price) values ('1', '2', '892'); insert into Sales (sale_id, customer_id, price) values ('2', '1', '354'); insert into Sales (sale_id, customer_id, price) values ('3', '3', '988'); insert into Sales (sale_id, customer_id, price) values ('4', '3', '856');
解题思路
这道题涉及的表比较多。
Salesperson表中保存了所有的销售人员。
Customer表中保存了所有的客户,以及服务客户的销售人员ID。
Sales表中保存了所有客户的订单信息,包括订单金额。
题目要求:计算出每个销售人员的总销售额。
那么,首先,我们需要知道每个销售人员服务的所有客户。
然后,通过客户获取客户的所有订单。
最后,根据销售人员分组汇总统计即可。
参考SQL
未特别说明的情况下,参考SQL为基于MySQL8.0实现。
select a.salesperson_id, a.name, coalesce(sum(c.price),0) total from Salesperson a left join Customer b on a.salesperson_id = b.salesperson_id left join Sales c on b.customer_id = c.customer_id group by a.salesperson_id;
本站所有内容均为原创,本站保留所有权利。仅允许非商业用途的转载,但必须注明来源网站、作者、来源链接!否则,由此造成的一切后果,由转载方承担!
干货分享、技术提升、面试笔试、学习交流,欢迎关注公众号:xuesql。QQ学习交流群:209942678。