如何在BigQuery中用SQL计算每行多列的唯一值数量
BigQuery SQL实现每行多列唯一值统计
假设现有表格数据如下:
| name | math | english | science |
|---|---|---|---|
| Amy | 69 | 70 | 70 |
| Mike | 65 | 71 | 63 |
| Jay | 66 | 66 | 66 |
需要新增一列n_unique,统计每行中math、english、science三列的唯一值数量,预期输出如下:
| name | math | english | science | n_unique |
|---|---|---|---|---|
| Amy | 69 | 70 | 70 | 2 |
| Mike | 65 | 71 | 63 | 3 |
| Jay | 66 | 66 | 66 | 1 |
基础实现SQL语句
利用BigQuery的数组函数可以快速完成需求:
SELECT name, math, english, science, ARRAY_LENGTH(ARRAY_DISTINCT([math, english, science])) AS n_unique FROM `your-project.your-dataset.your-table`
语句逻辑说明
[math, english, science]:将当前行的三个科目成绩打包成一个数组ARRAY_DISTINCT():去除数组中的重复元素ARRAY_LENGTH():计算去重后数组的长度,即唯一值的数量
处理含NULL值的场景
如果表格中存在NULL值,且需要忽略这些NULL值(不将其计入唯一值统计),可以添加ARRAY_FILTER过滤NULL:
SELECT name, math, english, science, ARRAY_LENGTH(ARRAY_DISTINCT(ARRAY_FILTER([math, english, science], x -> x IS NOT NULL))) AS n_unique FROM `your-project.your-dataset.your-table`
内容的提问来源于stack exchange,提问作者Karry
相关产品推荐
相关产品推荐

