如何在postgres中进行条件聚合?

时间:2016-04-15 16:11:55

标签: postgresql

我想在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语句,但我不确定如何实现它。

1 个答案:

答案 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) 替换为您的实际表格