sql-给定列中每个不同值的单行
在bigquery中,有没有一种方法可以使用sql(更具体地说)在给定列中为每个唯一值获取一行 我知道,使用一系列联合查询是可能的,在这些查询中,联合值与感兴趣的列中的不同值一样多。但我想知道是否有更好的方法。您可以使用行号: 这将返回任意行。您可以通过按调整顺序来控制哪一行 BigQuery中另一个有趣的解决方案使用结构:sql-给定列中每个不同值的单行,sql,google-bigquery,Sql,Google Bigquery,在bigquery中,有没有一种方法可以使用sql(更具体地说)在给定列中为每个唯一值获取一行 我知道,使用一系列联合查询是可能的,在这些查询中,联合值与感兴趣的列中的不同值一样多。但我想知道是否有更好的方法。您可以使用行号: 这将返回任意行。您可以通过按调整顺序来控制哪一行 BigQuery中另一个有趣的解决方案使用结构: select array_agg(t limit 1)[ordinal(1)].* from t group by col; 如果需要特定的行,可以按X限制1按顺序添加订
select array_agg(t limit 1)[ordinal(1)].*
from t
group by col;
如果需要特定的行,可以按X限制1按顺序添加订单。这里是一种更格式化的格式:
select tab.* except(seqnum)
from (
select *, row_number() over (partition by column_x order by column_x) as seqnum
from `project.dataset.table`
) as tab
where seqnum = 1
下面是BigQuery标准SQL
#standardSQL
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY col
您可以使用以下示例中的虚拟数据测试、播放上述内容
#standardSQL
WITH `project.dataset.table` AS (
SELECT 1 id, 1 col UNION ALL
SELECT 2, 1 UNION ALL
SELECT 3, 1 UNION ALL
SELECT 4, 2 UNION ALL
SELECT 5, 2 UNION ALL
SELECT 6, 3
)
SELECT AS VALUE ANY_VALUE(t)
FROM `project.dataset.table` t
GROUP BY col
结果
Row id col
1 1 1
2 4 2
3 6 3
. . 我相信,当一个答案满足您的需求并且您喜欢时,处理堆栈溢出问题的标准做法是接受答案,而不是发布您自己的等效答案。
Row id col
1 1 1
2 4 2
3 6 3