计算所有列和同一 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;
所以这是我的问题:
我的数据中有大量的双胞胎,我想在 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;