簡體   English   中英

在不同分組中獲得匯總結果的更有效方法? - SQL

[英]More efficient way to get aggregate results in different groupings? - SQL

我有一張像這樣的桌子:

id    category    subcategory     value0    value1    value2
1     1           1               100       324       940
1     1           2               222       404       1000
1     2           3               333       304       293
1     2           3               490       490       400
1     3           2               140       400       499

我想計算AVG(value0)僅基於id, categoryAVG(value1) , AVG(value2)基於id, category, subcategory

現在,我通過以下方式計算:

SELECT DISTINCT
    id
  , category
  , sub-category
  , AVG(value0) OVER (PARTITION BY id, category)
  , AVG(value1) OVER (PARTITION BY id, category, subcategory)
  , AVG(value2) OVER (PARTITION BY id, category, subcategory)
FROM my_table

我在更長的查詢中使用上面的代碼,但它導致了這個錯誤,所以我希望通過不使用 window 函數來更好地優化它: Resources exceeded during query execution. The query could not be executed in the allotted memory. Peak usage: 133% of limit. Top memory consumer: OVER() clauses: 100%. Resources exceeded during query execution. The query could not be executed in the allotted memory. Peak usage: 133% of limit. Top memory consumer: OVER() clauses: 100%.

我在想類似的事情:

SELECT 
    id
  , category
  , subcategory
  , AVG(value1)
  , AVG(value2)
FROM my_table
GROUP BY 1, 2, 3

但我不確定如何關聯我的AVG(value0)結果。

您可以使用兩列idcategory LEFT JOIN兩個單獨的聚合查詢的結果:

SELECT * FROM

(SELECT 
  id,
  category,
  subcategory,
  AVG(value1) AS avgvalue1,
  AVG(value2) AS avgvalue2
FROM your_table
GROUP BY 1, 2, 3)

LEFT JOIN

(SELECT 
  id,
  category,
  AVG(value0) AS avgvalue0
FROM your_table
GROUP BY 1, 2)

USING (id, category)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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