考慮下表和資料集。
CREATE TABLE MY_TABLE(
"Group" TEXT,
Callees INTEGER,
Callers INTEGER
);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 1, 505);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 2, 172);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 3, 33);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 4, 20);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 5, 5);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 6, 5);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 7, 3);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 8, 4);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 9, 3);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 10, 2);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 11, 1);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 13, 1);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 14, 1);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 16, 1);
INSERT INTO MY_TABLE("Group", Callees, Callers) VALUES ('Group1', 22, 2);
我想創建一個累積分布,根據 Callees 列中的值為組顯示總呼叫者的累積百分比。例如,對于值 Callees = 1,我想要第一個輸出行:
Group1 1 505 0.6662
Group1 2 172 0.8931
Group1 3 33 0.9366
...
Group1 22 1 1.0000
其中 0.6662 是 505 除以呼叫者總數 758。然后,當我們沿 Callees 列值向下移動時,以下行應包含累積百分比。
我試過了:
select "Group", Callers,
cume_dist() over ( order by Callees desc) as CumulativeP
from MY_TABLE
order by "Group", Callees
但它并沒有給我想要的輸出。我怎樣才能做到這一點?
我正在使用 SQLite 3.3x
uj5u.com熱心網友回復:
解決您的問題:
select "Group", Callees,mt.Callers,
ROUND((sum(callers) over(Partition By "Group" order by Callees) * 1.00) / (sum(callers) over (Partition By "Group" RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)),4) CumulativeP
from MY_TABLE mt
order by "Group", Callees;
作業示例:db fiddle link
說明:
Window函式 containsWindow Frame定義函式計算時應包含的行數或范圍。
例如,要計算累積總和,應從第一行到當前行對每一行應用總和。
現在要計算整個表或所有行的總和(在定義的磁區內),范圍應該是從表的第一行到最后一行(或磁區,如果已定義),這可以定義為UNBOUNDED PRECEDING(它告訴從表或磁區的第一行獲取行)和“UNBOUNDED FOLLOWING”(告訴將行獲取到表或磁區中的最后一行)。
的語法Window Frame是:
( GROUPS | RANGE | ROWS ) start
(GROUPS | RANGE | ROWS ) BETWEEN start AND end
從哪里開始:
UNBOUNDED PRECEDING
expr PRECEDING
CURRENT ROW
expr FOLLOWING
和結束可以是:
expr PRECEDING
CURRENT ROW
UNBOUNDED FOLLOWING
expr FOLLOWING
更多資訊Window Function請查看以下鏈接:
官方檔案
為了更好地理解Window Frame,請點擊以下鏈接:
Sqlite 視窗框架
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/490817.html
