如何在含聚合函数的SQL查询中加入timestamp时间戳列
报错原因说明
该报错是SQL分组聚合的标准规则导致的:使用GROUP BY对数据分组后,SELECT子句中只能保留两类内容:一是GROUP BY指定的分组字段,二是被SUM/COUNT/MAX这类聚合函数包裹的其他字段。你之前的查询仅按activity_title分组,直接查询activity_published_at不属于上述两类,因此触发报错。
根据你的业务逻辑,同一个短信库(同一个activity_title)的发布日期activity_published_at是完全一致的,可以用以下两种方案解决问题:
方案1:将activity_published_at加入GROUP BY子句
这是最符合SQL规范的方案,同一个活动的发布日期固定,加入后不会改变原有分组逻辑,查询语句如下:
SELECT activity_title, SUM(message_segments) AS "cumulative_message_segments", activity_published_at FROM textbankvendor.messages_export GROUP BY 1, 3 ORDER BY 1
方案2:用聚合函数包裹activity_published_at
如果你不想修改GROUP BY子句,可以用MAX或者MIN这类聚合函数包裹activity_published_at,同一个活动下所有行的发布日期相同,取最大/最小值结果和原始值完全一致:
SELECT activity_title, SUM(message_segments) AS "cumulative_message_segments", MAX(activity_published_at) AS activity_published_at FROM textbankvendor.messages_export GROUP BY 1 ORDER BY 1
两种方案返回的结果完全一致,可根据使用习惯选择。
内容的提问来源于stack exchange,提问作者Nick Lal
相关产品推荐
相关产品推荐

