SQL-行中元素的数量不同

时间:2018-09-28 13:20:18

标签: mysql sql

假设我有三列:dim1,dim2,dim3-所有int类型值。

我想计算中不同值的数量-因此,对于ID#13的行,dim1 = 20,dim2 = 30和dim3 = 20,该值存储在新创建的列将等于2。

这有可能吗?我在COUNT DISTINCT的多个列上尝试了多种组合,但到目前为止还没奏效。

2 个答案:

答案 0 :(得分:2)

诸如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)假设每一行都有某种ID,则可以使用union将数据转换成更多的键/值集,这将允许您使用count:< / p>

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

答案 1 :(得分:0)

也许是这样(但是我没有尝试)

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   ....