环境:MySQL 5.7.29
0、问题描述
现在有如下图所示的表 income_record :
需要按照 name,month_id 对 amount 进行求和,计算出每个 name 每个 month_id 对应的收入之和,并且将每个月的收入之和作为一列,需要生成的目标表如下:
有如下两种方式可以实现:
方法1
方法1首先分别对每月的数据进行求和,然后在用 JOIN 方法拼接各个月的数据,得到最终结果。当月份很多时,这种方法较为繁琐。具体代码如下:
SELECT t1.name,
t1.amount_m1,
t2.amount_m2
FROM
(
SELECT name,
SUM(amount) AS amount_m1
FROM income_record
WHERE month_id = '2021-01'
GROUP BY name
) t1
LEFT JOIN
(
SELECT name,
SUM(amount) AS amount_m2
FROM income_record
WHERE month_id = '2021-02'
GROUP BY name
) t2
ON t1.name = t2.