开发者社区> 问答> 正文

计算每行的唯一值(在索引轴上,而不是列方向)

我有下表:

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所以在这两种方言的答案被接受。

展开
收起
祖安文状元 2020-01-03 18:59:37 565 0
1 条回答
写回答
取消 提交回答
  • 在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)计算唯一值的数量。

    2020-01-03 18:59:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载