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 聚合函数的主要内容,如果未能解决你的问题,请参考以下文章
在 R 中为 Google BigQuery 使用 IN 运算符
Bigquery Standard Sql 等效于 Legacy Sql 中的 GROUP_CONCAT_UNQUOTED
SQL - BigQuery - 在多个列中使用 Group 和 MAX - 类似于数据透视表