聚合函数以保留特定值,具体取决于其他列
aggregate function to keep specific value, depending of other columns
我有以下格式的数据
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;
在 postgres 9.4+ 中,您可以对聚合和 window 函数使用 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
我有以下格式的数据
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;
在 postgres 9.4+ 中,您可以对聚合和 window 函数使用 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