我想在Postgres中进行条件聚合。我有一个包含id
列和float items
列的表。
我想写的查询是这样的:
SELECT ( ((SUM(items) * 3) WHERE id="123"))
+ ((SUM(items) * 2) WHERE items="124")) )
FROM mytable
我希望得到一个号码。例如,如果我的表看起来像这样:
org_id items
123 10
123 3
124 12
我想取回单个号码63
(即13*3
+ 12*2
)。
我很确定我需要一个CASE
语句,但我不确定如何实现它。
答案 0 :(得分:1)
在PostgreSQL 9.4 +中:
with open("sample.json", "r") as fp:
json_dict = json.load(fp)
json_string = json.dumps(json_dict)
,或者,在早期版本中,
SELECT SUM(items) FILTER (WHERE org_id = 123) * 3 +
SUM(items) FILTER (WHERE org_id = 124) * 2
FROM mytable
但是,如果您有很多这样的对,那么将它们存储在一个表中(而不是硬编码)是有意义的,只需使用它:
SELECT SUM(items * CASE org_id WHEN 123 THEN 3 WHEN 124 THEN 2 END)
FROM mytable
将嵌套查询SELECT SUM(items * coeff)
FROM (
VALUES
(123, 3),
(124, 2)
) m (id, coeff)
JOIN mytable
USING (id)
替换为您的实际表格