【问题标题】:google bigquery SQL group by aggregate functiongoogle bigquery SQL group by 聚合函数
【发布时间】: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 表达有什么问题。您应该发布完整的查询。

标签: sql group-by google-bigquery case-when


【解决方案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 它工作正常.....但是当我包含它时,我得到了上面提到的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2014-08-24
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
  • 2022-10-25
相关资源
最近更新 更多