最近在一次求职面试中,我遇到了以下问题。
说我有下表
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 的名称,widget_costs 是widget 的价格,in stock 是常数1。
现在对于我的商业保险,我有一定的免赔额。我正在寻找一个 sql 语句,它会告诉我每个小部件及其价格超过免赔额。所以如果我的免赔额是 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
)
;
这给了我
widget_Name | widget_Costs | In_Stock
---------------------------------------------------------
c | 20.00 | 1
d | 25.00 | 1
因为它使用a和b来满足大部分免赔额
我希望有人能告诉我正确的答案
编辑:我理解面试问题是问这个。给定一个小部件及其价格表,并给出一个美元金额,减去尽可能多的小部件,最多为美元金额,然后返回这些小部件及其剩余价格
最佳答案
我会提出一个答案,以防万一它比看起来更容易,但如果这个想法只是返回任何成本超过免赔额的小部件,那么你会做这样的事情:
Select
Widget_Name, Widget_Cost, In_Stock
From
Widgets
Where
Widget_Cost > 50 -- SubSelect for variable deductibles?
对于您的示例数据,我的查询不返回任何行。
关于sql - 面试题最优解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5624824/