mysql单表,依据数据内容按比例计算出权限值,依据权限值进行排序

还请各位帮忙看下这个问题要如何解决。
表单内容如下图:

img


表名为COMPANY_PLANT

需求:
依据数据计算出p1~p3每个厂房的权限值,最终依据权限值进行降序排序。

解析:
1.每个厂(PLANT)都有三个数据类别(DATA_TYPE):OUTPUT,WFF,DID,它们都有ACT和GOAL两个数据值;
2.关于权限值的计算以p1为例(其他厂区比例一致),p1的权限值 = OUTPUT数据类别的(ACT/GOAL)*0.5的值 + WFF数据类别的(ACT/GOAL)*0.25的值 + DID数据类别的(ACT/GOAL)*0.25的值;
3.ACT和GOAL两个值存在为0的情况。

原始数据和增加p4 存在act/goal为0的记录:

img


语句机结果截图:

img


完整源代码:

 select c.*
 from 
 (select b.plant,sum(b.weight) sum_weight
   from 
      ( select
         a.plant,a.data_type, case a.data_type
                    when 'OUTPUT' then (act/goal)*0.5
                    when 'WFF'    then (act/goal)*0.25
                    when 'DID'    then (act/goal)*0.25
                    end weight                    
          from 
            (select plant,data_type,act,goal from COMPANY_PLANT where goal <>0) a
       ) b
 group by b.plant 
 ) c 
 order by c.sum_weight desc;

SELECT * FROM csdn_test.COMPANY_PLANT;
SELECT 
    *
FROM
    (SELECT 
        PLANT,
            SUM(CASE
                WHEN
                    data_type = 'OUTPUT'
                THEN
                    (CASE
                        WHEN goal = 0 THEN 0
                        ELSE act / goal * 0.5
                    END)
                ELSE (CASE
                    WHEN goal = 0 THEN 0
                    ELSE act / goal * 0.25
                END)
            END) AS weight
    FROM
        COMPANY_PLANT
    GROUP BY PLANT) as temp
ORDER BY weight desc