MySQL 获取 table 列的总和 - PIVOT
MySQL get sum of a table columns - PIVOT
我有两个 table,一个 user
table 包含用户信息,一个 transaction
table 包含交易信息,它们都链接到一个用户。事务可以有多种类型。我想要做的是获取每个用户的每种交易类型的总和。
但是,我一直在尝试通过连接来执行此操作,这给我留下了奇怪的结果。
事务
用户
预期结果
用户行具有以下每种类型的总和;
- 0 => 47.5
- 1 => -47.5
- 4 => -4.4
得到的结果
我执行了以下查询;
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
我有两个 table,一个 user
table 包含用户信息,一个 transaction
table 包含交易信息,它们都链接到一个用户。事务可以有多种类型。我想要做的是获取每个用户的每种交易类型的总和。
但是,我一直在尝试通过连接来执行此操作,这给我留下了奇怪的结果。
事务
用户
预期结果
用户行具有以下每种类型的总和;
- 0 => 47.5
- 1 => -47.5
- 4 => -4.4
得到的结果
我执行了以下查询;
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