블로그를 이전 중이라 완료되기 전까지는 벨로그에 작성할 계획입니다.
이후 모든 글은 https://weekwith.me 에 작성 예정이니 다른 글이 궁금하시다면 해당 링크를 통해 방문해주세요.본 글은 [ LeetCode ] 2372. Calculate the Influence of Each Salesperson을 풀고 작성한 글입니다.
Table: Salesperson
+----------------+---------+
| Column Name | Type |
+----------------+---------+
| salesperson_id | int |
| name | varchar |
+----------------+---------+
sales_person_id is the primary key for this table.
Each row in this table shows the ID of a salesperson and the price of one unit.
Table: Customer
+----------------+------+
| Column Name | Type |
+----------------+------+
| customer_id | int |
| salesperson_id | int |
+----------------+------+
customer_id is the primary key for this table.
salesperson_id is a foreign key from the Salesperson table.
Each row in this table shows the ID of a customer and the ID of the salesperson
Table: Sales
+-------------+------+
| Column Name | Type |
+-------------+------+
| sale_id | int |
| customer_id | int |
| price | int |
+-------------+------+
sale_id is the primary key for this table.
customer_id is a foreign key from the Customer table.
Each row in this table shows ID of a customer and the price they paid for the sale with sale_id.
Write an SQL query to report the sum of prices paid by the customers of each salesperson. If a salesperson does not have any customers, the total value should be 0
.
Return the result table in any order.
Salesperson
테이블을 기준으로 Customer
테이블을 LEFT JOIN
구를 활용해 수평 연결하고 다시 연결된 Customer
테이블을 기준으로 Sales
테이블을 LEFT JOIN
구를 활용해 수평 연결하면 된다.
GROUP BY
구를 활용하여 salesperson_id
필드를 기준으로 필드를 묶고 SUM()
집계 함수를 사용하여 price
테이블의 합계를 구하면 되는데 이때 IFNULL()
함수를 사용해 NULL
값을 반환하는 경우에 대해 0
으로 치환하면 된다.
접근법을 토대로 풀면 아래와 같다.
SELECT
Salesperson.salesperson_id,
Salesperson.name,
IFNULL(SUM(Sales.price), 0) AS total
FROM Salesperson
LEFT JOIN Customer
USING (salesperson_id)
LEFT JOIN Sales
USING (customer_id)
GROUP BY Salesperson.salesperson_id;