我有下表:
WITH data AS (
SELECT 10 AS A, 10 AS B, 10 AS C
UNION ALL
SELECT 20 AS A, 10 AS B, 20 AS C
UNION ALL
SELECT 30 AS A, 20 AS B, 10 AS C
UNION ALL
SELECT 40 AS A, 40 AS B, 40 AS C
UNION ALL
SELECT 50 AS A, 20 AS B, 20 AS C)
SELECT * FROM data;
A B C
0 10 10 10
1 20 10 20
2 30 20 10
3 40 40 40
4 50 20 20
现在,我想计算每行的唯一值的数量,并将其存储在名为Unique_count
所以我的预期输出将是:
A B C Unique_count
0 10 10 10 1
1 20 10 20 2
2 30 20 10 3
3 40 40 40 1
4 50 20 20 2
我熟悉SELECT DISTINCT。但是这些都是按列操作。我不知道如何在SQL中对每一行进行计数。
使用pandasPython中的模块,它将简单地是:
data['Unique_count'] = data.nunique(axis=1)
我有机会获得一个MS SQL SERVER或者MySQL SERVER所以在这两种方言的答案被接受。
在SQL Server中,使用横向连接- apply关键字`:
select t.*, v.unique_count
from t cross apply
(select count(distinct col) as unique_count
from (values (t.a), (t.b), (t.c)) v(col)
) v;
横向联接与from子句中的相关子查询很像-但更笼统,因为子查询可以返回不止一列和不止一行。
此版本完全符合其外观:取消透视列,然后用于count(distinct)计算唯一值的数量。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。