在我的数据集中,我正在寻找在金额类别下同时具有正面和负面结果的价值。例如,一个实体可以是银行账户,有钱(正数)和钱外出(负数)。
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)
答案 0 :(得分:0)
如果每个description
只需要一行,则需要group by description
并使用聚合函数。检查amount
和min(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进行测试,只需直接使用min
和max
。
看起来您有多个列可能充当您的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