Когда я запускаю это, я получаю сообщение об ошибке ...'enrollment_date' in select clause is neither an aggregate...
Странно, что это происходит с ключом unique_key.
Но я думаю, что происходит то, что вы пытаетесь указать дату и причину зачисления в своем списке, но вы не сгруппированы по ним. Ваш запрос пытается получить все строки для одного unique_key
, но затем он не знает, какой enrollment_reason
вернуть, например. Даже если каждая запись с указанным c unique_key
имеет один и тот же enrollment_reason
, оптимизатор запросов этого не знает, поэтому он не делает этого предположения.
Как правило, чтобы исправить это, следует группировать по всему элементу select, который не является агрегатом.
select unique_key , date_trunc('month',enrollment_date::date) date_enrolled,
enrollment_reason, count(unique_key)
from table1
group by unique_key, date_enrolled, enrollment_reason;
Другой подход заключается в размещении этих атрибутов в агрегате. Это хорошо работает, если вы знаете, что столбец всегда один и тот же, или вам все равно, какой результат вы получите для этого столбца. Макс является распространенным выбором для этого.
select unique_key,
max(date_trunc('month',enrollment_date::date)) date_enrolled,
max(enrollment_reason),
count(unique_key)
from table1
group by unique_key, date_enrolled, enrollment_reason;