2017-06-13 66 views
0
State  ID  Value  Result1 (%)  Result2 (Rank) 
MA  AAA 44  0.24   2 
MA  BBB 12  0.07   4 
MA  CCC 90  0.50   1 
MA  DDD 34  0.19   3 
CT  EEE 200  0.10   5 
CT  FFF 300  0.15   4 
CT  GGG 400  0.20   3 
CT  HHH 500  0.25   2 
CT  III 600  0.30   1 

有沒有一種方法可以計算按GROUP(在本例中是「State」)的總計百分比,然後按降序排列它們?MySQL - 按組計算總數的百分比

我有前3列,我想計算MySQL中的最後2列。

我已經看到很多計算單個組中百分比的例子,但是我找不到一個例子,其中百分比是跨多個組計算的,然後排名。然後,我想將結果限制在前N位(例如前3位)。

+0

什麼是你想要的輸出,使得其可以清除更多。 –

+0

你是怎麼計算出這個百分比值(第4列)的 – Rams

+0

@Rams,它在第4列中不是真正的百分比,而是從44/180中的百分比是_24.44%。 180是國家的總和(價值)組 –

回答

1

您可以得到由結果:

SELECT * 
FROM (
    SELECT tt.* 
    ,@statewiserank := IF(@state_v = State, @statewiserank + 1, 1) AS statewiserank 
    ,@state_v := State 
    FROM (
     SELECT State,ID,Value, value/ 
      (SELECT sum(value) 
      FROM yourtable it 
      WHERE it.state=ot.state 
      GROUP BY state) result1_perc 
     FROM yourtable ot 
     ORDER BY state, result1_perc DESC) tt 
    ) 
WHERE statewiserank <= 3 
+0

是的,它會工作 – Rams