MySQL - 按组计算总数百分比

时间:2017-06-13 13:18:42

标签: mysql rank top-n

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

有没有办法计算BY GROUP总数的百分比(在本例中为“State”),然后按降序排列?

我有前3列,我想计算MySQL中的最后2列。

我已经看到了大量计算单个组中百分比的示例,但我找不到一个示例,其中百分比是在多个组中计算的,然后进行排名。然后我想将结果限制在前N(例如前3)。

1 个答案:

答案 0 :(得分: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