![](/img/trans.png)
[英]SQL - efficient way to aggregate boolean values (postgresql)
[英]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, category
和AVG(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)
結果。
您可以使用兩列id
和category
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.