MySQL 获取 table 列的总和 - PIVOT

MySQL get sum of a table columns - PIVOT

我有两个 table,一个 user table 包含用户信息,一个 transaction table 包含交易信息,它们都链接到一个用户。事务可以有多种类型。我想要做的是获取每个用户的每种交易类型的总和。

但是,我一直在尝试通过连接来执行此操作,这给我留下了奇怪的结果。

事务

用户

预期结果

用户行具有以下每种类型的总和;

得到的结果

我执行了以下查询;

SELECT u.username,
       Sum(t1.amount) AS t1Sum,
       Sum(t2.amount) AS t2Sum,
       Sum(t3.amount) AS t3Sum
FROM   users u
       JOIN transactions t1
         ON t1.user_id = u.id
            AND t1.type = 0
            AND t1.id <= 16
       JOIN transactions t2
         ON t2.user_id = u.id
            AND t2.type = 1
            AND t2.id <= 16
       JOIN transactions t3
         ON t3.user_id = u.id
            AND t3.type = 4
            AND t3.id <= 16
WHERE  u.id = 4 

我认为正在发生的事情是事务行本身正在连接,导致查询需要总和的额外行,我只是不确定如何解决它。

这是一个枢轴场景:

试试这个,

SELECT u.username,
       sum(case when t1.type=0 then t1.amount else 0 end) AS t1Sum,
       sum(case when t1.type=1 then t1.amount else 0 end) AS t2Sum,
       sum(case when t1.type=4 then t1.amount else 0 end) AS t3Sum
FROM   users u
       JOIN transactions t1
         ON t1.user_id = u.id
            AND t1.id <= 16
WHERE  u.id = 4 
group by u.username