2017-06-13 110 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