Подсчет различных нескольких столбцов в красном смещении - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь подсчитать строки, которые имеют четкую комбинацию из 2 столбцов в Amazon RedShift.Я использую запрос: -

select count(distinct col1, col2)
from schemaname.tablename
where some filters

Он выдает мне эту ошибку -

Amazon Недопустимая операция: подсчет функции (изменение символов, bigint) не существует`

Я пытался привести bigint к char, но это не сработало.

Ответы [ 4 ]

0 голосов
/ 26 февраля 2019

Немного опоздал на вечеринку, но в любом случае: вы также можете попытаться объединить столбцы, используя ||оператор . может быть неэффективным, поэтому я не буду использовать его в коде продукта, но для специального анализа все будет в порядке.

select count(distinct col1 || '_' || col2)
from schemaname.tablename
where some filters

Выбор разделителя примечаний может материи, то есть оба 'foo' || '_' || 'bar_baz' и 'foo_bar' || '_' || 'baz' дают 'foo_bar_baz' и, таким образом, равны.В некоторых случаях это может быть проблемой, в некоторых случаях это настолько незначительно, что вы можете полностью пропустить разделитель.

0 голосов
/ 24 сентября 2018

Вы можете использовать

, выбрать col1, col2, count (*) из schemaname.tablename где - ваша группа фильтров по col1, col2

0 голосов
/ 24 сентября 2018

Если вы просто пытаетесь сделать count(distinct), тогда ответ Зайнул верен.Если вам нужны и другие агрегаты, вот другой метод:

select . . ., 
       sum(case when seqnum = 1 then 1 else 0 end) as col1_col2_unique_count
from (select t.*,
             row_number() over (partition by col1, col2 order by col1) as seqnum
      from schemaname.tablename t
      where some filters
     ) c
0 голосов
/ 24 сентября 2018

Вы можете использовать подзапрос и считать

select count(*) from (
  select distinct col1, col2 
 from schemaname.tablename
  where some filter
) as t
...