2013-08-22 40 views
3

我有一列計數,並且希望通過此列的最大值來劃分列以獲得比率。 我試過sql按列分列最大值

select t.count/max(t.count) 
from table t 
group by t.count 

但失敗。 我也試過沒有GROUP BY的那個,仍然失敗。

訂購計數desc並選擇第一個作爲紅利沒有在我的情況下工作。考慮我對產品子類別有不同的計數。對於每個產品類別,我希望將子類別的計數除以該類別中的最大計數。我想不出一種避免集合函數的方法。

回答

1

如果你想每個類別中的MAX(),你需要一個相關子查詢:

select t.count*1.0/(SELECT max(t.count) 
        FROM table a 
        WHERE t.category = a.category) 
from table t 

,或者您需要PARTITION BYMAX()

select t.count/(max(t.count) over (PARTITION BY category)) 
from table t 
group by t.count 
2

在所有SQL方言以下工作:

select t.count/(select max(t.count) from t) 
from table t 
group by t.count; 

注意SQL的某些版本做整數除法,那麼結果將是0或1。您可以通過1.0或鑄造乘以解決這個問題浮動。

大多數SQL版本也支持:

select t.count/(max(t.count) over()) 
from table t 
group by t.count; 

同樣的原則同樣適用有關整數除法。

+0

+1雖然我仍然認爲分子和分母應該交換。 – Yuck

1

您可能需要使用子查詢導出max值嘗試(包括在同一個查詢可能無法正常工作,你期待的方式,因爲你是在說你是聚集在同一列編組)

Select t.count/(select max(sub.count) from table sub) 
from table t 
group by t.count