WITH
temp AS (
SELECT
courier_id,
sum(expense_amount) AS expense
FROM
expenses_info
WHERE
MONTH(expense_date) = 7
GROUP BY
courier_id
)
SELECT
courier_id,
courier_name,
base_salary + fee - expense AS total_income
FROM
(
SELECT DISTINCT
a.courier_id,
a.courier_name,
a.base_salary,
sum(b.delivery_fee) OVER (
PARTITION BY
courier_id
) fee,
temp.expense
FROM
couriers_info AS a
INNER JOIN deliveries_info AS b ON a.courier_id = b.courier_id
AND MONTH(b.delivery_date) = 7
INNER JOIN temp ON temp.courier_id = a.courier_id
ORDER BY
courier_id ASC
) AS couriers_info_2
ORDER BY
courier_id ASC
写的有点麻烦了但思路比较简单,这道题有一个点就是不要把三个表直接相连,要不然会出现很多重复项用DISTINCT也去不掉这样的话计算总和的时候就会错误,我的处理是先将两个表相连,剩下一个表先用GROUP BY进行处理再相连,最后处理数据就好了

京公网安备 11010502036488号