2016-04-29 42 views
3

我有以下查詢:計算列(重量/ MAX(重量)

select ema.es_symbol as symbol, ema.score as score, ema.weight as weight, rsi.relative_strength_index as relative_strength_index 
from ema_score ema, relative_strength_index rsi inner join 
    (select rsi_symbol, max(rsi_date) as maxDate from relative_strength_index group by rsi_symbol) rsiDate 
    on rsi.rsi_symbol = rsiDate.rsi_symbol 
    and rsi.rsi_date = rsiDate.maxDate 
where ema.es_symbol = rsi.rsi_symbol 
and ema.score not in (0,1,10,11) 
and rsi.relative_strength_index not in (0,100); 

我想添加一個計算列像下面的一個作爲最終列:

ema.weight/max(ema.weight) 

的我想要的結果是每個符號重量除以權重列中的最大權重當我按照自己的方式嘗試時,我只收到1行結果我究竟在這裏做了什麼錯誤

+0

沒有group by子句的任何聚合函數(如max())會將結果集合折成單個記錄。 – Shadow

+0

我嘗試了一組,但我的計算列收到每行相同的答案。 – ULuFlanders

+0

@ULuFlanders,因爲你必須使用子查詢作爲除數,請檢查我的答案。 –

回答

0

您必須使用子查詢MAX作爲除數,類似:

select ema.weight*1.0/(select max(weight) from #t ema2) 
from #t ema 
+1

我調整了這個查詢,它確實有效。謝謝您的回答。 – ULuFlanders

0

任何聚合函數,如MAX(),而沒有group by子句塌陷結果集中到一個單一的記錄。您需要在子查詢中選擇最大值,並使用交叉連接將其與所有記錄相關聯。此外,不要混合隱式和顯式連接,如果將外連接添加到查詢中,您可能會有非常討厭的驚喜!

select ema.es_symbol as symbol, ema.score as score, ema.weight as weight, ema.weight/maxweight as percentage, rsi.relative_strength_index as relative_strength_index 
from ema_score ema 
    join (select max(weight) as maxweight from ema_score) t 
    inner join relative_strength_index rsi on ema.es_symbol = rsi.rsi_symbol 
    inner join 
    (select rsi_symbol, max(rsi_date) as maxDate from relative_strength_index group by rsi_symbol) rsiDate 
    on rsi.rsi_symbol = rsiDate.rsi_symbol 
    and rsi.rsi_date = rsiDate.maxDate 
where ema.score not in (0,1,10,11) 
and rsi.relative_strength_index not in (0,100); 
+0

我更喜歡這個解決方案,但是它不會過濾掉以下Where和And子句過濾掉的權重。對不起,如果我的問題沒有反映更清楚。 – ULuFlanders

+0

然後在子查詢中必須添加相同的條件,包括任何連接不幸。 – Shadow