计算所有列和同一 ID 的值不同的次数

Count number of times the value differs for all columns and for a same id

所以这是我的问题:

我的数据中有大量的双胞胎,我想在 SQL 中计算同一 ID 的列不具有相同值的次数。

所以,例如,如果我有以下 table :

这是我想要的输出:

姓名:2

电子邮件:3

年龄:1

状态:5

有人可以帮我吗?

请记住,我的真实数据中有更多的列,所以一个一个地做并不是最好的解决方案。我想要一个可以直接计算所有列的代码,但目前我没有找到解决方案:/

谢谢,多多关照!

针对特定列的一种可能的解决方案如下所示:

select distinct Count(*) over()
from t
group by id
having Count(distinct name) > 1;

结果:2

select distinct Count(*) over()
from t
group by id
having Count(distinct age) > 1;

结果:1

如果您可以使用 window 函数,在单个查询中计算多个列的示例是:

select 
    Count(distinct case when name1 != name2 then id end) NameCount, 
    Count(distinct case when age1 != age2 then id end) AgeCount
from (
    select *,
      Min(name) over(partition by id) name1,
      Max(name) over(partition by id) name2,
      Min(age)  over(partition by id) age1,
      Max(age)  over(partition by id) age2
    from t
)t;