使用 BigQuery SQL 计算同一 ID 的所有列值的模式
Posted
技术标签:
【中文标题】使用 BigQuery SQL 计算同一 ID 的所有列值的模式【英文标题】:Calculate mode of all column values for the same ID using BigQuery SQL 【发布时间】:2021-05-06 12:15:36 【问题描述】:假设我有一个 Bigquery 表,其中包含 id
、species
、genre
和 level
列。在某些情况下,对于相同的 id
、species
和 genre
,我的表在多行中可能具有不同的 level
值。
最后,我希望每个 id
有 1 行,level
值作为 mode
在原始表中存在的所有 level
值中为 id
。
例子
#standardSQL
with `project.dataset.table` as (
select '123' id, 'dog' species, 'suspense' genre, 3 level union all
select '124', 'cat', 'love', 4 union all
select '123', 'dog', 'suspense', 5 union all
select '123', 'dog', 'suspense', 5
)
select *
from `project.dataset.table`
预期结果:
相同的数据集,每个 id 一行。例如。在上面的例子中,对于id
123 级别将是5
(出现次数最多)
我怎样才能做到这一点?
[更新] 上述数据只是一个例子。我的实际数据集中有 2000 万行,超过 4 列。
【问题讨论】:
【参考方案1】:试试这个:
with `project.dataset.table` as (
select '123' id, 'dog' species, 'suspense' genre, 3 level union all
select '124', 'cat', 'love', 4 union all
select '123', 'dog', 'suspense', 5 union all
select '123', 'dog', 'suspense', 5
)
select id, array_agg(level order by cnt desc limit 1)[offset(0)] as mode
from (
select id, level, count(level) as cnt
from `project.dataset.table`
group by id, level
)
group by id
【讨论】:
以上是关于使用 BigQuery SQL 计算同一 ID 的所有列值的模式的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 BigQuery 标准 SQL 提取特定 ID 的自定义维度