在聚合

时间:2016-09-27 10:14:02

标签: sql google-bigquery

我想在某些字段上聚合,并在其他字段上获取任何非空值。更确切地说,查询看起来像:

SELECT id, any_value(field1), any_value(field2) FROM mytable GROUP BY ID

列如下:

ID  | field1 | field 2
-----------------
id  | null   | 3
id  | 1      | null
id  | null   | null
id  | 2      | 4

,输出可以像(id, 1,4)(id,2,4)或......但不是(id, 1, null)

我无法在文档中找到any_value()是否保证返回非空行(如果有的话)(尽管在我的实验中这样做)或者可能返回{{1}行即使存在一些非空值,也可以使用值。

null执行我描述的任务吗?如果不是你建议做什么?

2 个答案:

答案 0 :(得分:0)

这是一种猜测,但你试过了吗?

SELECT id, MIN(field1), MAX(field2)
FROM mytable
GROUP BY id;

这将忽略NULL值从两列返回不同的值。

答案 1 :(得分:0)

您也可以使用分析功能。

以下是查询(SQL服务器):

Pointee

这将只返回一行,如果您要在任何列中查找最大值,则可以更改select id, field1, field2 from (select id, field1, field2, row_number() over (partition by id order by isnull(field1, 'ZZZ') asc, isnull(field2, 'ZZZ') asc) as RNK from mytable) aa where aa.RNK = 1; 子句中的顺序。

相关问题