1

我有以下格式的数据

id_A id_B 值
--------------------------------
 1 1 1
 1 2 2  
 2 1 3
 2 3 4  

有没有一种按 id_A 分组的好方法,同时保持 id_A = Id_B 行的值?

我需要汇总的原因是,如果没有这样的线,我想要平均值。

结果应如下所示:

id_A 值
-----------------
 1 1
 2 3.5

我想出了以下内容,但那个案例对我来说看起来很丑陋和hacky。

Select id_A,
    Coalesce(
        avg(case when id_A = id_B then val else null end),
        avg(val)
    ) as value
From myTable
Group by id_A; 
4

1 回答 1

1

使用 postgres 9.4+,您可以将FILTER子句用于聚合和窗口函数:

functions. Something like this:
Select id_A,
    Coalesce(
        avg(val) filter(where id_A = id_B),
        avg(val)
    ) as value
From myTable
Group by id_A; 

详细信息:http ://www.postgresql.org/docs/current/static/sql-expressions.html

于 2016-03-23T15:52:04.953 回答