Count (случай, когда) redshift sql - получение групповой ошибки - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь сделать подсчет (случай, когда) в Amazon Redshift.

Используя эту ссылку , я написал:

select
sfdc_account_key,
record_type_name,
vplus_stage,
vplus_stage_entered_date,
site_delivered_date,

case when vplus_stage = 'Lost' then -1 else 0 end as stage_lost_yn,
case when vplus_stage = 'Lost' then 2000 else 0 end as stage_lost_revenue,
case when vplus_stage = 'Lost' then datediff(month,vplus_stage_entered_date,CURRENT_DATE) else 0 end as stage_lost_months_since,
count(case when vplus_stage = 'Lost' then 1 else 0 end) as stage_lost_count


from shared.vplus_enrollment_dim
where record_type_name = 'APM Website';

Но я получаю эту ошибку:

[42803][500310] [Amazon](500310) Invalid operation: column "vplus_enrollment_dim.sfdc_account_key" must appear in the GROUP BY clause or be used in an aggregate function; java.lang.RuntimeException: com.amazon.support.exceptions.ErrorException: [Amazon](500310) Invalid operation: column "vplus_enrollment_dim.sfdc_account_key" must appear in the GROUP BY clause or be used in an aggregate function;

Запрос работал нормально, прежде чем я добавил счетчик. Я не уверен, что я делаю не так здесь - спасибо!

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019

Основное правило:

  • Если вы используете агрегатную функцию (например, COUNT(...)), то вы должны предоставить предложение GROUP BY для определения группировки
  • Исключение: если все столбцы являются агрегатами (например, SELECT COUNT(*), AVG(sales) FROM table)
  • Любые столбцы, которые не агрегатные функции должны появляться в GROUP BY (например, SELECT year, month, AVG(sales) FROM table GROUP BY year, month)

Ваш запрос содержит агрегированную функцию COUNT() с неагрегированными значениями, что приводит к ошибке.

Рассматривая ваш запрос, вы, вероятно, не хотите группировать по всем столбцам (например, stage_lost_revenue и stage_lost_months_since не похожи на вероятные группы столбцов). Возможно, вы захотите смоделировать результат запроса, чтобы выяснить, что вы на самом деле хотите получить от такого запроса.

0 голосов
/ 16 апреля 2019

Вы не можете иметь агрегатную функцию (сумму, количество и т. Д.) Без group by

Синтаксис такой:

select a, count(*)
  from table
 group by a (or group by 1 in Redshift)

В запросе необходимо добавить

group by 1,2,3,4,5,6,7,8

потому что у вас есть 8 столбцов, отличных от count

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

...