moo*_*eep 5 postgresql aggregate-functions
我有一个大表,我想按一个列值对其进行分组并生成另一个列值的聚合。作为一个聚合,我不关心实际值,只要它是出现在按列分组的任何行中的值。类似的东西coalesce(),例如产生它在输入集中接收的第一个非空值的聚合。
当然,coalesce()不是聚合函数,实际上没有聚合函数匹配我需要的行为,在文档中:
如何通过查询检索组中每个组的任何元素?我知道我可以使用min()ormax()但我宁愿避免将所有值相互比较来确定结果。一种可以防止为已经具有值的组点击更多页面的解决方案将是理想的。这是一个大表(磁盘上有几 GB),有大组(数十万行)。
我已经看到有递归 CTE 和横向连接。我正在尝试围绕这些进行思考,看看这些是否有帮助......
下面是一个例子:
with t1(x) as (select * from generate_series(0, 10, 1)),
t2(x, y) as (select * from t1, t1 t2)
select x
, any_element(y) -- how can I simulate this any_element() aggregate function?
from t2
group by x
order by x
Run Code Online (Sandbox Code Playgroud)
distinct on 将返回任何行:
with t1(x) as (select * from generate_series(0, 10, 1)),
t2(x, y) as (select * from t1, t1 t2)
select distinct on (x) x,y
from t2
where y is not null
order by x
Run Code Online (Sandbox Code Playgroud)
或者只是min/max按照评论中的建议使用。
| 归档时间: |
|
| 查看次数: |
4164 次 |
| 最近记录: |