我正在爲我的公司工作。因此我需要使用Spark SQL case語句來過濾某些內容。Spark SQL中的case語句
我有一個名爲OPP_amount_euro(用於保存某些東西的金額)的列,我有一個名爲OPP_amount_euro_binned的列(默認值爲1)。 所以我想編程某種間隔。 如果OPP_amount_euro中的值爲< 30000,則OPP_amount_euro_binned中的值應爲1,依此類推。
我已經試過尋找解決方案,但它不是最好的解決方案。
select
case when OPP_amount_eur < 30000 then 1
when OPP_amount_eur >= 30000 then 2
when OPP_amount_eur >= 50000 then 3
when OPP_amount_eur >= 100000 then 4
when OPP_amount_eur >= 300000 then 5
when OPP_amount_eur >= 500000 then 6
when OPP_amount_eur >= 1000000 then 7
end as OPP_amount_eur_binned
from inputTable
所以這段代碼運行良好,但我不能在表中選擇任何其他列。如果我在選擇後寫'*',我將得到以下錯誤信息:
處理異常:ParseException:當'expect','','','','','' GROUP',ORDER,HAVING,LIMIT,LATERAL,WINDOW,UNION,EXCEPT,INTERSECT,SORT,CLUSTER,DISTRIBUTE} ,pos 5)== SQL == Select * OPP_amount_eur < 30000 then 1 ----- ^^^ OPP_amount_eur> = 30000時的情況,當OPP_amount_eur> = 50000時爲2,OPP_amount_eur> = 100000時爲3,OPP_amount_eur> = 300000,那麼當OPP_amount_eur> = 500000時爲5,則當OPP_amount_eur> = 1000000時爲6,則7結束爲來自temptable3083b308bcec4124b6a4650f2bb40695的OPP_amount_eur_binned
爲什麼我不能這樣做? 我在網上搜索它,並在正常的SQL似乎工作,爲什麼這是不可能在Spark SQL? 有沒有解決方法?
我很抱歉我的不好的描述,但我絕對是新來的,我也從來沒有與Spark SQL聯繫過。 我作爲學生在我的培訓生中。
儘量'選擇可輸入解決方案*,CASE ...'。 (ANSI SQL方式。) – jarlh
順便說一句,這是'case' _expression_,而不是語句。 – jarlh
非常感謝您的回覆。我改變了你的建議,但我有另一個問題的代碼。新列OPP_amount_eur_binned將被添加,但只填充'1'和'2'。例如,我在OPP_amount_eur列中的值爲132917.94,而對應的開單列值爲2 ...通常,它應該得到值'4',因爲它大於100000,您是否知道爲什麼這是不工作? – mafin