【发布时间】:2020-12-05 02:45:16
【问题描述】:
我下面有一个大查询程序;
WITH cte AS(
SELECT *
FROM (
SELECT project_name,
SUM(reward_value) AS total_reward_value,
DATE_TRUNC(date_signing, MONTH) as month,
date_signing,
Row_number() over (partition by DATE_TRUNC(date_signing, MONTH)
order by SUM(reward_value) desc) AS rank
FROM `deals`
WHERE CAST(date_signing as DATE) > '2019-12-31'
AND CAST(date_signing as DATE) < '2020-02-01'
AND target_category = 'achieved'
AND project_name IS NOT NULL
GROUP BY project_name, month, date_signing
)
)
SELECT * FROM cte WHERE rank <= 5
返回以下结果:
虽然我希望每个月内每个独特的项目都是 SUM,然后我只过滤前 5 个。
类似这样的:
如果删除了 date_signing 分组,我会收到以下错误 PARTITION BY 表达式引用了在 [16:48] 处既不分组也不聚合的列 date_signing
任何应该更正的提示将不胜感激!
【问题讨论】:
-
你是按 `date_signing` 分组的,我想你不希望这样,而且在 group by 或 order by 语句中使用列顺序也不是一个好主意,使其难以阅读和维护
-
我编辑了我的问题以添加在组中包含“date_signing”的意图
标签: sql google-bigquery