我正在努力從我的 SQL 陳述句中的資料庫表中檢索“加權概率”。
我需要做什么:
我有可能的財務價值的表格資訊,例如:
表 my_table
| ID | 磷 [%] | 價值 [$] |
|---|---|---|
| 1 | 50 | 200 |
| 2 | 50 | 200 |
| 3 | 60 | 100 |
我需要計算發生合理的最壞情況財務價值的加權概率。
公式為:
P_weighted = 1 - (1 - P_1 * Value_1/Max(Value_1-n) * (1 - P_2 * Value_2/Max(Value_1-n) * ...
IE
P_weighted = 1 - Product(1 - P_i * Value_i / Max(Value_1-n)
P_weighted = 1 - (1 - 50% * 200 / 200) * (1 - 50% * 200 / 200) * (1 - 60% * 100 / 200) = 82.5%
我知道 (Oracle) SQL 中的 is not product 函式,這可以用 EXP(SUM LN(x))) 代替,確保 x 始終為正。
因此,如果我只計算我可以的組合概率(不管我可以做的值是多少:
SELECT EXP(SUM(LN(1 - t.P))) FROM FROM my_table t WHERE condition
當我需要包含 Max(t.Value) 時,我遇到了以下問題:
SELECT 串列不能同時包含組函式(例如 AVG、COUNT、MAX、MIN、SUM、STDDEV 或 VARIANCE)和單個列運算式,除非單個列運算式包含在 GROUP BY 子句中。
所以我嘗試了以下方法:
SELECT ROUND(1-EXP(SUM(LN(1 - t.P*t.Value/max(t.Value)))),1) FROM FROM my_table t WHERE condition GROUP BY t.P, t.Value
但這顯然是按概率對輸出進行分組而不是乘以它,并且只回傳 0.5 或 50% 而不是應該為 0.825 或 82.5% 的乘積。
如何使用(Oracle)SQL 從上表中獲取加權概率?
uj5u.com熱心網友回復:
這樣做:
with da as (select .50 as p, 200 as v from dual union all select .50 , 200 from dual union all select .60,100 from dual),
mx as (select max(v) mx from da)
select exp(sum(ln(1-da.p*da.v/mx))) from da, mx;
EXP(SUM(LN(1-DA.P*DA.V/MX)))
----------------------------
.175
uj5u.com熱心網友回復:
with
test1 as(
select max(value) v_max from my_table
),
test2 as(
select 1-(my.p/100* value/t1.v_max) rez
from my_table my, test1 t1
)
select to_char(round((1-(EXP (SUM (LN (rez)))))*100,2))||'%' "Weighted probability"
from test2
結果:
Weighted probability
--------------------
82,5%
uj5u.com熱心網友回復:
如果您想要每行計算,那么您可以使用分析SUM:
SELECT id,
ROUND(1 - EXP(SUM(LN(1 - wp)) OVER (ORDER BY id)), 3) AS cwp
FROM (
SELECT id,
p * value / MAX(value) OVER () AS wp
FROM table_name
)
其中,對于樣本資料:
CREATE TABLE table_name (ID, P, Value) AS
SELECT 1, .50, 200 FROM DUAL UNION ALL
SELECT 2, .50, 200 FROM DUAL UNION ALL
SELECT 3, .60, 100 FROM DUAL;
輸出累積加權概率:
ID CWP 1 .5 2 .75 3 .825
如果您只想要總加權概率,那么:
SELECT ROUND(1 - EXP(SUM(LN(1 - wp))), 3) AS twp
FROM (
SELECT id,
p * value / MAX(value) OVER () AS wp
FROM table_name
)
其中,對于樣本資料,輸出:
TWP .825
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/454335.html
上一篇:如何在with_something查詢中使用ANALYZEEXPLAIN
下一篇:多個復選框的資料模型
