我有以下格式的数据
id_A id_B val -------------------------------- 1 1 1 1 2 2 2 1 3 2 3 4
是否有一种很好的方法可以将id_A分组,同时保持id_A = Id_B的行值?
我需要聚合的原因是,如果没有这样的行,我想要平均值。
结果应如下所示:
id_A val ----------------- 1 1 2 3.5
我想出了以下内容,但那个案子对我来说看起来很丑陋和丑陋。
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;
答案 0 :(得分: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