SQL - различное количество элементов в строке - PullRequest
0 голосов
/ 28 сентября 2018

Допустим, у меня есть три столбца: dim1, dim2, dim3 - все значения типа int.

Я хочу вычислить количество различных значений в строке - поэтому в случае строки с идентификатором # 13 dim1 = 20, dim2 = 30 и dim3 = 20 значение сохраняется ввновь созданный столбец будет равен 2.

Возможно ли это как-нибудь?Я пробовал разные комбинации на COUNT DISTINCT для нескольких столбцов, но пока не получилось.

Ответы [ 2 ]

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

Агрегатные функции, такие как count, работают через строки, а не столбцы.Я вижу два способа решения этой проблемы:

1) Вы можете использовать операторы case для решения этой проблемы (это решение значительно усложняется при наличии более 3 полей):

select dim1, dim2, dim3,
       case when dim1 <> dim2 then 1 else 0 end
       + case when dim1 <> dim3 then 1 else 0 end
       + case when dim2 <> dim3 then 1 else 0 end as cnt
from your_table

2Предполагая, что у вас есть какой-то идентификатор в каждой строке, вы можете использовать union, чтобы превратить ваши данные в более набор ключей / значений, что позволит вам использовать count:

select dim1, dim2, dim3, cnt
from your_table
     join (select id, count(distinct dim) as cnt from
                  (select id, dim1 as dim from your_table
                   union all 
                   select id, dim2 from your_table
                   union all 
                   select id, dim3 from your_table)
           group by id) c
     on your_table.id = c.id
0 голосов
/ 28 сентября 2018

Может быть, что-то вроде этого (однако я не пробовал)

SELECT row_id,
       CASE WHEN dim1=dim2 THEN CASE WHEN dim1=dim3 THEN 3 ELSE 2 END
            WHEN dim1=dim3 OR dim2=dim3 THEN 2
            ELSE 1
       END AS nr_equal
FROM   ....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...