我有一張這樣的桌子

對于每一天,我需要計算(當 cat=4 時當天的 val 總和)/(當 cat=3 時前一天的 val 總和)的比率。
你能告訴我如何計算嗎?
我可以像這樣分別計算分子和分母:
select Date, sum(val) as bal1 from performance
where cat=4 group by Date
select Date, sum(val) as bal2 from performance
where cat=3 group by Date
但我不確定如何將它們結合起來以獲得我上面提到的比率。可能我需要按日期加入兩個結果。
任何指導將不勝感激。
uj5u.com熱心網友回復:
您可以將聚合與LAG()視窗函式相結合:
SELECT Date,
SUM(CASE WHEN cat = 4 THEN val END) /
LAG(SUM(CASE WHEN cat = 3 THEN val END)) OVER (ORDER BY Date) ratio
FROM performance
GROUP BY Date;
請參閱演示。
uj5u.com熱心網友回復:
我們可以嘗試LAG()如下使用:
WITH cte AS (
SELECT *, LAG(cat) OVER (PARTITION BY Date ORDER BY Date) lag_cat,
LAG(val) OVER (PARTITION BY Date ORDER BY Date) lag_val
FROM performance
)
SELECT
Date,
SUM(CASE WHEN cat = 4 THEN val ELSE 0 END) /
SUM(CASE WHEN lag_cat = 3 THEN lag_val ELSE 0 END) AS ratio
FROM cte
GROUP BY Date;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/476318.html
下一篇:SQLite具有2個唯一列
