![](/img/trans.png)
[英]I cant' seem to understand how you fix this error : SELECT list expression references column users which is neither grouped nor aggregated
[英]Column neither grouped nor aggregated after introducing window query
我無法將簡單的 window function 集成到我的查詢中。 我使用來自 Kaggle 的鱷梨數據集。 我從一個簡單的查詢開始:
SELECT
date,
SUM(Total_Bags) as weekly_bags,
FROM
`course.avocado`
WHERE
EXTRACT(year FROM date) = 2015
GROUP BY
date
ORDER BY
date
它工作得很好。 接下來,我想將滾動總和添加到查詢中以沿每周總和顯示。 我嘗試了以下方法:
SELECT
date,
SUM(Total_Bags) as weekly_bags,
SUM(Total_Bags) OVER(
PARTITION BY date
ORDER BY date
ROWS BETWEEN 4 PRECEDING AND CURRENT ROW
)
FROM
`course.avocado`
WHERE
EXTRACT(year FROM date) = 2015
GROUP BY
date
ORDER BY
date
但我得到了常見的錯誤:
SELECT 列表表達式引用列 Total_Bags 既不分組也不聚合在 [4:7]
我很困惑。 第一個查詢中的 Total_Bags 已聚合,但在第二個查詢中再次引入時,它不再聚合。 如何修復此查詢? 謝謝。
In your query, which returns 2 columns: date
and aggregate SUM(Total_Bags)
, the window function SUM()
is evaluated after the aggregation when there is no column Total_Bags
and this is why you can't use it inside the window function.
但是,您可以只使用 window 函數和DISTINCT
來做您想要的,無需group by
:
SELECT DISTINCT date,
SUM(Total_Bags) OVER(PARTITION BY date) AS weekly_bags,
SUM(Total_Bags) OVER(
PARTITION BY date
ORDER BY date
ROWS BETWEEN 4 PRECEDING AND CURRENT ROW
)
FROM course.avocado
WHERE EXTRACT(year FROM date) = 2015
ORDER BY date;
我試圖從不同的角度來處理它,似乎我已經想通了,結果似乎恰到好處。 這是代碼:
WITH daily_bags AS
(SELECT
Date,
CAST(SUM(Total_Bags) as int64) as all_bags
FROM
`course.avocado`
WHERE
EXTRACT(year from Date) = 2015
GROUP BY
Date
ORDER BY
Date)
SELECT
Date,
all_bags,
SUM(all_bags) OVER(
ROWS BETWEEN 4 PRECEDING AND CURRENT ROW
) as rolling_sum
FROM
daily_bags
感謝大家的幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.