首页 > 解决方案 > 如何根据knex.js中的第三列将一列分成两列?

问题描述

我有一个任务,我一直在努力解决。

所以我有这张表transactions,它有 2 列bonustype如下所示:

bonus | type      
20       1
15      -1

我想要的是有一个查询,其bonus列分为两列bonus_spentbonus_lefttype.

它应该看起来像这样:

bonus_left | bonus_spent
    20            15

我知道我可以复制表并使用 where 子句将它们连接起来,但是有什么方法可以对单个查询执行此操作吗?

标签: postgresqlknex.js

解决方案


在 vanilla SQL 中,您将使用条件聚合。我们使用user_id指示奖金属于谁的列,我已用于SUM聚合以允许每种类型的奖金有多个:

SELECT user_id,
    SUM(CASE WHEN type =  1 THEN bonus ELSE 0 END) AS bonus_left,
    SUM(CASE WHEN type = -1 THEN bonus ELSE 0 END) AS bonus_spent
FROM transactions
GROUP BY user_id

输出:

user_id     bonus_left  bonus_spent
1           20          15

dbfiddle 上的演示


推荐阅读