Google BigQuery:即使在 SUM 别名更改时,SUM 也会返回不同的结果

Posted

技术标签:

【中文标题】Google BigQuery:即使在 SUM 别名更改时,SUM 也会返回不同的结果【英文标题】:Google BigQuery: SUM returns different results even on SUM alias changes 【发布时间】:2016-03-21 13:57:17 【问题描述】:

我有以下疑问:

SELECT 
      p_id,
      r_date,
      
      SUM(CASE WHEN p_type='h' AND post_p='c' THEN 1 ELSE 0 END) as test1
      
      FROM (
      
      SELECT 152234223 AS p_id,
      date AS r_date,
      sequence as p_type,
      
      LEAD(p_type, 1) OVER 
      (PARTITION BY u_id ORDER BY visit_id) AS post_p
      
      FROM   (Table_date_range([152234223.ses_],Timestamp('25022016'),Timestamp('29022016'))) 
 
      GROUP BY 1,2

此查询将返回 SUM 的结果,例如 145。 但是,如果我将 sum 的别名更改为“testing”或“test1234567890”,它将返回一个不同的值,高于或低于 145。

我想知道是否有人可以解释一下。需要解决方案!

非常感谢

【问题讨论】:

【参考方案1】:

如果您可以共享您的数据集,则验证这一点会更容易... 但只是通过阅读您的代码:

您的问题似乎在这里:

LEAD(p_type, 1) OVER 
      (PARTITION BY u_id ORDER BY u_id) AS post_p

当您按相同属性进行分区和排序时,每个分区内的记录顺序可能会不一致。所以每次运行查询时, LEAD() 可能会返回不同的结果。

别名更改的原因可能与缓存结果的返回有关。

【讨论】:

以上是关于Google BigQuery:即使在 SUM 别名更改时,SUM 也会返回不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 SUM 过滤结果时,Google BigQuery 相关子查询错误

Google BigQuery - 根据另一列中的值减去一列的 SUM

在 Google bigquery 中加入 3 个表

使用 Google BigQuery 执行查询期间超出资源

Google BigQuery API 强制 MaxResult

Google Cloud Data Fusion 无法访问其他项目的数据,即使已授予访问权限