我有下表:
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)计算唯一值的数量。