postgresql一栏2反对标准

时间:2016-03-02 16:23:20

标签: postgresql

在我的数据集中,我正在寻找在金额类别下同时具有正面和负面结果的价值。例如,一个实体可以是银行账户,有钱(正数)和钱外出(负数)。

SELECT description, account_subtype_id, subcategory_id, (case when amount > 0 then 1 end) AS amount_p, (case when amount < 0 then 0 end) AS amount_n
FROM mx.transactions
LIMIT 100
;

这种方法没有多大帮助,因为现在我的数据看起来像是:

bank_A 1 null
bank_A null 0 

但我真的想得到类似的东西:

bank_A 1 0

因为这对我的分析非常有帮助。

实际上。如果有办法做到这一点,那就更好了:

例如,实体有

Bank_A $500 -$300 -- (these two results both are from the amount column)

1 个答案:

答案 0 :(得分:0)

如果每个description只需要一行,则需要group by description并使用聚合函数。检查amountmin(amount)是否小于/大于0时,检查是否存在任何正面或负面max(amount)的干净方法是:

SELECT
  description,
  min(amount) < 0 AS amount_n,
  max(amount) > 0 AS amount_p
FROM mx.transactions
GROUP BY description

这些测试会为您提供真值和假值,但如果您需要其他内容,则可以在CASE / IF语句中使用它们。或者要获取实际值而不是针对0进行测试,只需直接使用minmax

看起来您有多个列可能充当您的bank_A标识符。如果是这种情况,您可以GROUP BY全部。

SELECT
  description,
  account_subtype_id,
  subcategory_id,
  min(amount),
  max(amount)
FROM mx.transactions
GROUP BY description, account_subtype_id, subcategory_id