google bigquery SQL group by 聚合函数

Posted

技术标签:

【中文标题】google bigquery SQL group by 聚合函数【英文标题】:google bigquery SQL group by aggregate function 【发布时间】:2018-07-16 11:08:16 【问题描述】:

在大查询标准 SQL 中,我收到错误消息:

“错误:第 7 列包含聚合函数,在 [17:22] 的 GROUP BY 中不允许使用该函数

其中第 7 列在 select 子句中定义如下:-

CASE WHEN MIN(transaction_dttm) = transaction_dttm THEN 'NEW' ELSE 'EXISTING' END AS Fcquisition_Flag

请注意,transaction_date 是一个时间戳

感谢任何建议的解决方案。

【问题讨论】:

编辑您的问题并显示您的查询的简化版本,以及示例数据和所需的结果。 我看不出你的 CASE 表达有什么问题。您应该发布完整的查询。 【参考方案1】:

也许你只需要子查询中的窗口函数:

SELECT . . .
FROM (SELECT . . . ,
             (CASE WHEN transaction_dttm = MIN(transaction_dttm) OVER (PARTITION BY ?)
                   THEN 'NEW' ELSE 'EXISTING'
              END) AS Fcquisition_Flag
      FROM . . . 
     ) t
GROUP BY 1, 2, 3, 4, 5, 6, 7

不清楚PARTITION BY中你想要什么。

【讨论】:

感谢戈登和蒂姆。 我尝试提交的查询如下: SELECT DATE(transaction_date) AS trans_date, TRIM(CONCAT(comp_quarter,' ',comp_year)) AS comp_year, CASE WHEN 合作伙伴不在 ('Nok') THEN 'Not_Nok' ELSE 'Nok' END AS Partner_Flag, CASE WHEN MIN(transaction_date) = transaction_dttm THEN 'NEW' ELSE 'EXISTING' END AS Acquisition_Flag, COUNT (DISTINCT sids) AS No_Subs, COUNT(CASE WHEN se = 'P' THEN 1 ELSE 0 END) AS sp_count FROM @ 987654323@ WHERE prod IN ('SSDPmed') AND DATE(transaction_dttm) = '2018-07-01' AND spf = 1 GROUP BY 1,2,3,4 这是简化的查询 - 没有 CASE WHEN WHEN WHEN WHEN WHICH 创建 ACQUISITION FLAG 它工作正常.....但是当我包含它时,我得到了上面提到的错误

以上是关于google bigquery SQL group by 聚合函数的主要内容,如果未能解决你的问题,请参考以下文章

Google BigQuery GROUP BY 超时

在 R 中为 Google BigQuery 使用 IN 运算符

Bigquery Standard Sql 等效于 Legacy Sql 中的 GROUP_CONCAT_UNQUOTED

SQL - BigQuery - 在多个列中使用 Group 和 MAX - 类似于数据透视表

Google 标准 SQL UDF - 写入 BigQuery

sql 已完成购买 - Google BigQuery