sql - postgres 查找同一列的数字之间的差异
问题描述
我有一张如下表
| date | key | value | |
|------------|-----|-------|---|
| 01-01-2009 | a | 25 | |
| 01-01-2009 | b | 25 | |
| 01-01-2009 | c | 10 | |
我正在尝试提出一个可以让我(a+b)-c
每天都做的查询 - 但我的加入正在这样做(a+b+c)-c
with total as (
select
sum(value),
date
from
A
where
key in ('a',
'b')
group by
date )
select
sum(total.sum) as a, sum(A.value) as b,
sum(total.sum) - sum(A.value) as value,
A.date
from
A
join total on
total.date = A.date
where
A.key = 'c'
group by
A.date
这给了我一个 50 的值(它应该是 40) - 我的 C 值在连接期间被计算为总表的一部分
我究竟做错了什么?
解决方案
简单地进行条件聚合怎么样?
select date,
sum(case when key in ('a', 'b') then value
when key in ('c') then - value
end) as daily_calc
from a
group by date;
Ajoin
似乎对这个计算没有多大帮助。
推荐阅读
- c++ - 使用条件变量的 C++ 监视类/包装器
- batch-file - 不能在 robocopy 目标中使用破折号,也不能更改文件夹名称
- migration - 是否有任何工具可以将 etl RPG 流程迁移到现代 ETL 工具?
- flutter - Flutter:获取所有字母的位置。(游戏)
- python - time.clock() 会受到系统状态的严重影响吗?
- node.js - 如何使用我的选择查询更正 typeorm 错误?
- async-await - 在嵌套路由中刷新时未调用 asyncData
- webpack - SCSS 编译时间过长
- jquery - Phonegap AJAX 不适用于 iOS 和 Android
- selenium - 如何让 Rspec 连接到 CircleCI 上的 Chromedriver?