postgresql - 如何根据knex.js中的第三列将一列分成两列?
问题描述
我有一个任务,我一直在努力解决。
所以我有这张表transactions
,它有 2 列bonus
,type
如下所示:
bonus | type
20 1
15 -1
我想要的是有一个查询,其bonus
列分为两列bonus_spent
,bonus_left
按type
.
它应该看起来像这样:
bonus_left | bonus_spent
20 15
我知道我可以复制表并使用 where 子句将它们连接起来,但是有什么方法可以对单个查询执行此操作吗?
解决方案
在 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
推荐阅读
- c++ - 将 `conan.cmake` 与 `conan_multi` 生成器一起使用,缺少 build_type 参数?
- c - 从编译 C 代码的 Makefile 运行 ar 命令时出现“非法选项 -- U”
- sql - 数百万行的 DB2 更新语句
- powershell - 我忘记了我在 Powershell 中的脚本编写能力
- reactjs - 具有复杂类型的 React TypeScript UseContext 不起作用
- python - 使用 Beautiful Soup 解析结构复杂的 HTML
- mongodb - Mongo 聚合组和匹配
- graphql - 变量和参数的类型不匹配 (Int / Int)
- node.js - 如何忽略某些域作为 nock.back 的记录?
- php - Laravel: {closure}() 必须是 Illuminate\Mail\Message 的实例