Синтаксическая ошибка при попытке заполнения столбца числом уникальных значений в другом столбце - PullRequest
0 голосов
/ 30 января 2019

Я пытаюсь подсчитать количество уникальных операторов пула для каждого разрешения # в таблице, но у меня возникают проблемы при помещении этого значения в новый столбец, посвященный этому количеству.

Итак, у меня есть 2 таблицы:doh_analysis;doh_pools.

Обе эти таблицы имеют столбец "allow" (TEXT), но в doh_analysis есть около 1000 строк с дубликатами в столбце разрешения, но случайные уникальные значения в столбце оператора (TEXT).

Я пытаюсь заполнить столбец "operator_count" в таблице "doh_pools" количеством уникальных значений в "pooloperator" для каждого разрешения #.

Итак, я попробовал следующий код, но получаю синтаксическую ошибку на уровне или около "(":

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

Когда я убираю "select" перед "count", которое я получаю "Ошибка SQL [42803]: ОШИБКА: агрегатные функции не разрешены в ОБНОВЛЕНИИ ".

Я могу успешно запросить список различных пар разрешений-пулов операторов, используя:

select distinct permit, pooloperator
from doh_analysis;

И я могу запроситьколичество уникальных пуловоператоров на разрешение 1 за один раз, используя:

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

Но я изо всех сил пытаюсь вставить количество уникальных пар для каждого разрешения # в столбце operatorcount.

IsЕсть ли способ сделать это?

1 Ответ

0 голосов
/ 30 января 2019

Конечно, есть лучший способ сделать это, но я достиг своей цели, создав 2 промежуточные таблицы и обновив целевую таблицу значениями из 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;
...