簡體   English   中英

引入 window 查詢后的列既未分組也不聚合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM