SQL解惑-有趣的數值累加遊戲-orastar
1、問題描述
Target列的計算方法:以id為順序累計value,但是隻累計相同符號(+ -,0作為負數處理)的,且碰到不同的符號後從0開始累計。請問這個用sql怎麼計算?
2、方法一, from 網名:noverleve
with tb(id,value) as (
select 1,-1 from dual union
select 2,-6 from dual union
select 3,-3 from dual union
select 4,2 from dual union
select 5,3 from dual union
select 6,9 from dual union
select 7,5 from dual union
select 8,-1 from dual union
select 9,9 from dual union
select 10,3 from dual union
select 11,0 from dual union
select 12,-2 from dual union
select 13,-3 from dual),
td as (
select a.*,
nvl((select min(id)-1 from tb
where case when value=0 then -1 end/abs(case when value=0 then -1 end)*-1
=case when a.value=0 then -1 end/abs(case when a.value=0 then -1 end) and id>a.id),(select max(id) from tb)) id2
from tb a)
select id,value,(select sum(value) from td where a.id2=id2 and id<=a.id) target from td a;
3、方法二, from 網名:orastar
個人思路,僅供參考,
target = decode(id,'反向點',value,sum(current-id.value----min反向點.value))
1、找反向點,即第一個反值的點。
2、反向點:target=id.value,其它target=sum(當前到min反向點value之和)
with aaa as
(select 1 id, -1 value from dual union all
select 2 id, -6 value from dual union all
select 3 id, -3 value from dual union all
select 4 id, 2 value from dual union all
select 5 id, 3 value from dual union all
select 6 id, 9 value from dual union all
select 7 id, 5 value from dual union all
select 8 id, -1 value from dual union all
select 9 id, 9 value from dual union all
select 10 id, 3 value from dual union all
select 11 id, 0 value from dual union all
select 12 id, -2 value from dual union all
select 13 id, -3 value from dual),
bbb as
(select a.id,
a.value,
decode(sign(decode(a.value, 0, -1, a.value)) +
sign(lag(a.value, 1) over(order by id)),
0,
id,
0) f1
from aaa a),
ccc as
(select b.id,
b.value,
b.f1,
decode(nvl((select max(f1) from bbb b2 where b2.id < b.id), 0),
0,
1,
(select max(f1) from bbb b2 where b2.id < b.id)) f2
from bbb b)
select c.id,
c.value,
decode(c.id - c.f1,
0,
value,
sum(value) over(order by to_number(c.id) rows between c.id-c.f2 preceding and current row)) f4
from ccc c;
ID VALUE F4
---------- ---------- ----------
1 -1 -1
2 -6 -7
3 -3 -10
4 2 2
5 3 5
6 9 14
7 5 19
8 -1 -1
9 9 9
10 3 12
11 0 0
12 -2 -2
13 -3 -5
13 rows selected.
4、方法三: from 網名:靈感
使用sqlserver,終於弄出來了。派生出來分組列很關鍵,
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31442014/viewspace-2146775/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [20240807]數值累加的問題.txt
- [20191021]數值累加的各種方法.txt
- [20191104]數值累加的各種方法3.txt
- [20191028]數值累加的各種方法2.txt
- 滿足條件的數累加被17整除的數的累加
- 有趣的正則填字遊戲遊戲
- SQL Server解惑——查詢條件IN中能否使用變數SQLServer變數
- 遊戲數值乾貨:RPG戰鬥數值開源示範遊戲
- 遊戲戰鬥力數值研究(一)遊戲
- 除了做遊戲,遊戲廠商還幹過哪些有趣的“副業”?遊戲
- 為什麼遊戲裡的數字,真的“值錢”?遊戲
- 10 個超級有趣的 Linux 終端遊戲Linux遊戲
- 遊戲設計的本質(一):數值的本質遊戲設計
- 【SQL】SQL解惑-如何從字串中獲取IP地址SQL字串
- 競速遊戲的商業化及數值成長遊戲
- Linux系統中有趣的命令(可以玩小遊戲)Linux遊戲
- 讓遊戲更有趣的祕訣:策略與隨機遊戲隨機
- 做數值就是做體驗! RPG遊戲關卡數值設計思路分析遊戲
- SQL 如何拆分字串中的數值後排序SQL字串排序
- 怎樣的遊戲才會讓你覺得有趣呢?遊戲
- 任天堂:遊戲最初的目的,不過是好玩和有趣遊戲
- Python 解惑:整數比較Python
- 有趣的數學公式(一)公式
- 有錢和有趣,遊戲公司該如何權衡?遊戲
- 撕掉“醜”的標籤,體素是如何讓遊戲更有趣的?遊戲
- 有趣的角度:《權力的遊戲》少兒不宜資料盤點遊戲
- 對戰遊戲設計,如何營造有趣耐玩的策略?遊戲設計
- SQL Server解惑——標識列的限制和跳號現象SQLServer
- 遊戲不放假:TapTap與遊戲產業的價值增量遊戲APT產業
- 遊戲與教育:談討遊戲背後的教育價值遊戲
- 一文窺見『遊戲數值』規劃步驟遊戲
- 遊戲策劃是如何用數值來影響玩家體驗的?遊戲
- 四元數在旋轉變換和插值中的有趣的視覺化解釋視覺化
- 1206 簡單的累加
- 遊戲數值入門:經驗產出與角色等級遊戲
- 搭建一個遊戲系統,如何做好數值設計?遊戲
- 如何理解遊戲研究的學術價值?遊戲
- 記一個有趣的數學題
- 有趣的獨立遊戲在這裡聚集!2022 indiePlay中國獨立遊戲大賽報名開始 !遊戲