外貿(mào)網(wǎng)站建設(shè).cover有利于seo優(yōu)化的是
大家好,我是空空star,本篇帶大家了解一道簡(jiǎn)單的力扣sql練習(xí)題。
文章目錄
- 前言
- 一、題目:607. 銷售員
- 二、解題
- 1.正確示范①
- 提交SQL
- 運(yùn)行結(jié)果
- 2.正確示范②
- 提交SQL
- 運(yùn)行結(jié)果
- 3.正確示范③
- 提交SQL
- 運(yùn)行結(jié)果
- 4.正確示范④
- 提交SQL
- 運(yùn)行結(jié)果
- 5.其他
- 總結(jié)
前言
一、題目:607. 銷售員
表: SalesPerson
+-----------------+---------+
| Column Name | Type |
+-----------------+---------+
| sales_id | int |
| name | varchar |
| salary | int |
| commission_rate | int |
| hire_date | date |
+-----------------+---------+
sales_id 是該表的主鍵列。
該表的每一行都顯示了銷售人員的姓名和 ID ,以及他們的工資、傭金率和雇傭日期。
表: Company
+-------------+---------+
| Column Name | Type |
+-------------+---------+
| com_id | int |
| name | varchar |
| city | varchar |
+-------------+---------+
com_id 是該表的主鍵列。
該表的每一行都表示公司的名稱和 ID ,以及公司所在的城市。
表: Orders
+-------------+------+
| Column Name | Type |
+-------------+------+
| order_id | int |
| order_date | date |
| com_id | int |
| sales_id | int |
| amount | int |
+-------------+------+
order_id 是該表的主鍵列。
com_id 是 Company 表中 com_id 的外鍵。
sales_id 是來(lái)自銷售員表 sales_id 的外鍵。
該表的每一行包含一個(gè)訂單的信息。這包括公司的 ID 、銷售人員的 ID 、訂單日期和支付的金額。
編寫一個(gè)SQL查詢,報(bào)告沒(méi)有任何與名為 “RED” 的公司相關(guān)的訂單的所有銷售人員的姓名。
以 任意順序 返回結(jié)果表。
查詢結(jié)果格式如下所示。
輸入:
SalesPerson 表:
+----------+------+--------+-----------------+------------+
| sales_id | name | salary | commission_rate | hire_date |
+----------+------+--------+-----------------+------------+
| 1 | John | 100000 | 6 | 4/1/2006 |
| 2 | Amy | 12000 | 5 | 5/1/2010 |
| 3 | Mark | 65000 | 12 | 12/25/2008 |
| 4 | Pam | 25000 | 25 | 1/1/2005 |
| 5 | Alex | 5000 | 10 | 2/3/2007 |
+----------+------+--------+-----------------+------------+
Company 表:
+--------+--------+----------+
| com_id | name | city |
+--------+--------+----------+
| 1 | RED | Boston |
| 2 | ORANGE | New York |
| 3 | YELLOW | Boston |
| 4 | GREEN | Austin |
+--------+--------+----------+
Orders 表:
+----------+------------+--------+----------+--------+
| order_id | order_date | com_id | sales_id | amount |
+----------+------------+--------+----------+--------+
| 1 | 1/1/2014 | 3 | 4 | 10000 |
| 2 | 2/1/2014 | 4 | 5 | 5000 |
| 3 | 3/1/2014 | 1 | 1 | 50000 |
| 4 | 4/1/2014 | 1 | 4 | 25000 |
+----------+------------+--------+----------+--------+
輸出:
+------+
| name |
+------+
| Amy |
| Mark |
| Alex |
+------+
解釋:
根據(jù)表 orders 中的訂單 ‘3’ 和 ‘4’ ,容易看出只有 ‘John’ 和 ‘Pam’ 兩個(gè)銷售員曾經(jīng)向公司 ‘RED’ 銷售過(guò)。
所以我們需要輸出表 salesperson 中所有其他人的名字。
二、解題
1.正確示范①
提交SQL
select name from SalesPerson
where sales_id not in(select sales_id from Orders where com_id in(select com_id from Company where name='RED')
);
運(yùn)行結(jié)果

2.正確示范②
提交SQL
select name from SalesPerson u1
left join (select sales_id from Orders u1join Company u2 on u1.com_id=u2.com_id where u2.name='RED'
) u2
on u1.sales_id=u2.sales_id
where u2.sales_id is null;
運(yùn)行結(jié)果

3.正確示范③
提交SQL
select name from SalesPerson u1
where not exists(select 1 from Orders u2where com_id in(select com_id from Company where name='RED')and u1.sales_id=u2.sales_id
);
運(yùn)行結(jié)果

4.正確示范④
提交SQL
select u1.name from SalesPerson u1
left join Orders u2
on u1.sales_id=u2.sales_id
left join Company u3
on u2.com_id=u3.com_id
group by u1.name
having sum(if(u3.name = 'RED', 1, 0))=0;
運(yùn)行結(jié)果

5.其他
總結(jié)
正確示范①思路:
先把向公司RED銷售過(guò)商品的銷售員id找到,再通過(guò)not in把這部分銷售員排除掉;
正確示范②思路:
先把向公司RED銷售過(guò)商品的銷售員id找到,通過(guò)left join關(guān)聯(lián)這部分?jǐn)?shù)據(jù)u2,限定u2.sales_id is null;
正確示范③思路:
通過(guò)not exists方式把向公司RED銷售過(guò)商品的銷售員記錄排出掉;
正確示范④思路:
以銷售人員表作為主表,關(guān)聯(lián)訂單表,公司表,按銷售人員分組group by u1.name,
篩選出向公司RED銷售過(guò)商品的銷售員記錄是0的having sum(if(u3.name = ‘RED’, 1, 0))=0。