Агрегатные функции, такие как 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