尝试使用另一列中的唯一值计数填充列时的语法错误

时间:2019-01-29 23:23:46

标签: postgresql count sql-update distinct

我正在尝试计算表中每个许可#的唯一池运算符的数量,但是很难将此值放入专用于该计数的新列中。

所以我有2个表:doh_analysis; doh_pools。

这两个表都有一个“ permit”列(TEXT),但是doh_analysis有大约1000行,permit列中有重复项,而运算符列(TEXT)中偶尔有唯一值。

我正在尝试在表“ doh_pools”中的“ operator_count”列中填充每个许可证#的“ pooloperator”中的唯一值计数。

所以我尝试了以下代码,但是在“(”或附近出现语法错误:

update doh_pools
set operator_count = select count(distinct doh_analysis.pooloperator)
from doh_analysis
where doh_analysis.permit ilike doh_pools.permit;

当我从“计数”之前删除“选择”时,出现“ SQL错误[42803]:错误:UPDATE中不允许使用聚合函数”。

我可以使用以下方法成功查询不同的许可池操作员对的列表:

select distinct permit, pooloperator
from doh_analysis;

我可以使用以下命令一次查询每个许可证1个唯一池操作员的数量:

select count(distinct pooloperator)
from doh_analysis
where permit ilike '52-60-03054';

但是我正在努力为operatorcount列中的每个permit#插入一个唯一对计数。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

当然有更好的方法,但是我通过创建2个中间表并使用第二个中间表中的值更新目标表来实现我的目标,就像这样:

select distinct permit, pooloperator
into doh_pairs
from doh_analysis;
select permit, count(distinct pooloperator)
into doh_temp
from doh_pairs
group by permit;
select count(distinct permit)
from doh_temp;
update doh_pools
    set operator_count = doh_temp.count
    from doh_temp
    where doh_pools.permit ilike doh_temp.permit
    and doh_pools.permit is not NULL
    returning count;