最近在面試中,我遇到了以下問題。面試問題的最佳解決方案
說我有如下表
widget_Name | widget_Costs | In_Stock
---------------------------------------------------------
a | 15.00 | 1
b | 30.00 | 1
c | 20.00 | 1
d | 25.00 | 1
其中WIDGET_NAME是持有小部件的名稱,widget_costs是一個小部件的價格,在股票的1
恆定現在對於我的商業保險我有一定的免賠額。我期待找到一個sql語句,它會告訴我每個小部件,並且它的價格超過了抵扣額。所以,如果我的dedudctible爲$ 50.00以上將只返回
widget_Name | widget_Costs | In_Stock
---------------------------------------------------------
a | 15.00 | 1
d | 25.00 | 1
由於部件B和C,其中用於滿足抵扣
我能得到最接近的是以下
SELECT
*
FROM (
SELECT
widget_name,
widget_price
FROM interview.tbl_widgets
minus
SELECT widget_name,widget_price
FROM (
SELECT
widget_name,
widget_price,
50 - sum(widget_price) over (ORDER BY widget_price ROWS between unbounded preceding and current row) as running_total
FROM interview.tbl_widgets
)
where running_total >= 0
)
;
其中給出me
widget_Name | widget_Costs | In_Stock
---------------------------------------------------------
c | 20.00 | 1
d | 25.00 | 1
因爲它使用a和b來滿足大部分的deductibl Ë
我希望有人也許能夠告訴我正確的答案
編輯:我理解的面試問題要問這個。給定一個小部件和它們的價格表,並給予一美元的金額,減去儘可能多的小部件,你可以達到美元數額並返回這些小部件和它們的價格仍然
我不明白您的樣本表數據和您的樣本回報是如何相關的。對每個超出可扣除價格的小部件的查詢將根據您的樣品返回一個空集。我可能會誤解標準,但如果不是這個樣本不符合規範。 – 2011-04-11 17:17:44
我不認爲這個問題很有意義。滿足免賠額的規則是什麼? – Randy 2011-04-11 17:19:23
你最初的問題看起來很直截了當,但你的例子看起來像你尋找的組合超過了你的免賠額,這看起來像你試圖解決SQL中的子集總和,這似乎是一個可怕的想法。 – 2011-04-11 17:25:29