一道著名的號稱微軟的試題的oracle解

2021-09-30 02:03:01 字數 1245 閱讀 6341

table如下

日期 收入 支出

2000/3/1 50 30

2000/3/2 45 60

2000/3/5 60 10

能否用select語句得出以下結果

日期 收入 支出 餘額

2000/3/1 50 30 20

2000/3/2 45 60 5

2000/3/3 0 0 5

2000/3/4 0 0 5

2000/3/5 60 10 55

這是乙個網上廣為流傳的題目,以前曾經有人說這是微軟的試題,這個不去管了,我們先看oracle的解

816 以上版本使用analistic function 的簡化版答案

sql> select * from test;

a b c

---------- ---------- ----------

5 5 5

2 2 1

4 4 5

6 1 3

8 4 4

sql> select tt2.tta, tt2.ttb, tt2.ttc, sum(tt2.ttb - tt2.ttc) over(order by tt2.tta) youwant

2 from

3 (4 select t1.aa tta,decode(t2.a,null,0,t2.b) ttb,decode(t2.a,null,0,t2.c) ttc

5 from

6 (select ((select min(a) from test) + rownum - 1) aa from all_objects

7 where rownum <= (select max(a) - min(a) +1 from test)) t1,

8 test t2

9 where t1.aa = t2.a(+)

10 ) tt2;

tta ttb ttc youwant

---------- ---------- ---------- ----------

2 2 1 1

3 0 0 1

4 4 5 0

5 5 5 0

6 1 3 -2

7 0 0 -2

8 4 4 -2

已選擇7行。

sql>

其實這類問題都是月度微通解的,主要就是構造連續的數字集合,如果all_objects記錄數不足完全可以做個自連線。比如曾經有求某段時間內的工作日天數,這類問題,也是如此解法。

一道微軟的Mini Test筆試題 二

一道微軟的mini test筆試題 二 題目要求基本如下 請編寫乙個控制台程式,要求使用者可以輸入任意組條件,定義兩個字母之間的大小關係。程式可以通過已輸入的條件,推斷出給定的兩個字母之間的大小關係。例如 使用者輸入 a b 使用者輸入 b c 使用者輸入 a?c 程式顯示 a c 使用者輸入 c ...

一道曾經微軟的面試題

題目描述 有10億個至多9位 號碼,找出這些 號碼不重複的個數,記憶體之給你256m的空間 分析 這相當於10億個int型整數,每個int佔四個位元組,40億個位元組,也就說儲存這些 號碼需要4g的記憶體空間,所以必須對這些 號碼進行壓縮 解決方法 可以用乙個位來表示這個 號碼是否存在,也就是說需要...

一道微軟面試題

聽說這是一道微軟面試題,今天無意中在網上看到。幾個月前我同學面試時遇到過乙個類似的題目,幾乎是原題。當時在群裡面討論過這個問題,答案不一。也沒有人知道最後的正確答案。下面是原題,帶答案解析。小明和小強都是張老師的學生,張老師的生日是m月n日,2人都知道張老師的生日是下列10組中的一天,張老師把m值告...