Ошибка RedShift при использовании COUNT (Distinct XXX) ОШИБКА: XX000: этот тип коррелированного шаблона подзапроса не поддерживается из-за внутренней ошибки - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть небольшой запрос, выполняемый в RedShift через Aginity, который получает следующую ошибку:

ОШИБКА: XX000: этот тип коррелированного шаблона подзапроса не поддерживается из-за внутренней ошибки

Текущий запрос:

SELECT 'MYSCHEMA.MYTABLE.FIELDA' as obj_name,
COUNT(*) as rows, 
COUNT(DISTINCT FIELDA) as distinct_vals, 
SUM(CASE WHEN FIELDA in ('00DK','00DC','00DE','00DD','00DB') THEN 1 ELSE 0 END) as enter, 
SUM(CASE WHEN TRIM(FIELDA) IN ('',null) THEN 1 ELSE 0 END) as nulls 
FROM MYSCHEMA.MYTABLE

Однако, если я удаляю DISTINCT, он запускается:

SELECT 'MYSCHEMA.MYTABLE.FIELDA' as obj_name,
COUNT(*) as rows, 
COUNT(FIELDA) as distinct_vals, 
SUM(CASE WHEN FIELDA in ('00DK','00DC','00DE','00DD','00DB') THEN 1 ELSE 0 END) as enter, 
SUM(CASE WHEN TRIM(FIELDA) IN ('',null) THEN 1 ELSE 0 END) as nulls 
FROM MYSCHEMA.MYTABLE

1 Ответ

1 голос
/ 26 сентября 2019

Работает ли это, если вы используете оконные функции в подзапросе?

SELECT 'MYSCHEMA.MYTABLE.FIELDA' as obj_name,
       COUNT(*) as rows, 
       SUM( (seqnum = 1)::INT ) as distinct_vals, 
       SUM(CASE WHEN FIELDA in ('00DK','00DC','00DE','00DD','00DB') THEN 1 ELSE 0 END) as enter, 
       SUM(CASE WHEN TRIM(FIELDA) IN ('',null) THEN 1 ELSE 0 END) as nulls 
FROM (SELECT t.*,
             ROW_NUMBER() OVER (PARTITION BY FIELDA ORDER BY FIELDA) as seqnum
      FROM MYSCHEMA.MYTABLE t
     ) t
...