Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何计算轴中的百分比_Sql_Oracle - Fatal编程技术网

Sql 如何计算轴中的百分比

Sql 如何计算轴中的百分比,sql,oracle,Sql,Oracle,我试图在数据透视表中计算每个部门的车辆类型百分比。我数了数: SELECT * FROM ( SELECT CASE WHEN TYPE_V = 'N1' THEN 'CAR' WHEN TYPE_INCIDENT IN ('N2', 'N3') THEN 'BUS' END TYPE_VEH, DEPARTEMENT FROM

我试图在数据透视表中计算每个部门的车辆类型百分比。我数了数:

    SELECT
    *
FROM
    (
    SELECT
        CASE
            WHEN TYPE_V = 'N1' THEN 'CAR'
            WHEN TYPE_INCIDENT IN ('N2',
            'N3') THEN 'BUS'
        END TYPE_VEH,
        DEPARTEMENT
    FROM
        DWH
    WHERE
        CODE = 'YES' ) PIVOT (COUNT(DEPARTEMENT)FOR DEPARTEMENT IN ('D1' AS D1,
    'D2' AS D2,
    ) )
结果:

===========================
TYPE_VEH        D1      D2
===========================
    CAR        2        8
    BUS        2        2
我想要的是:

===========================
TYPE_VEH        D1      D2
===========================
    CAR        20%      80%
    BUS        50%      50% 
你可以用

SELECT TYPE_VEH, D1 / (D1+D2) as D1, D2 / (D1+D2) as D2 FROM ...
而不是

SELECT * FROM

我想你根本不需要支点

您可以直接从表DW_DECSI2.DWH_DSI_F_PLAN_PERFORMANCE中获取此输出,如下所示:

SELECT
    DEPARTEMENT,
    (D1 * 100) / ( D1 + D2 ) || '%' AS D1,
    (D2 * 100) / ( D1 + D2 ) || '%' AS D2
FROM
    (
        SELECT
            DEPARTEMENT,
            SUM(CASE
                WHEN TYPE_V = 'N1' THEN 1
                ELSE 0
            END) AS D1,
            SUM(CASE
                WHEN TYPE_V <> 'N1'
                     AND TYPE_INCIDENT IN(
                    'N2', 'N3'
                ) THEN 1
                ELSE 0
            END) AS D2
        FROM
            DW_DECSI2.DWH_DSI_F_PLAN_PERFORMANCE
        WHERE
            CODE = 'YES'
        GROUP BY
            DEPARTEMENT
    );
干杯

您需要聚合来获取百分比,我建议您使用窗口分析函数来获取子查询中的聚合,而无需分组

SELECT TYPE_VEH, ( D1 / TOT ) * 100||'%' AS D1, ( D2 / TOT ) * 100||'%' AS D2               
  FROM (SELECT CASE
                 WHEN TYPE_V = 'N1' THEN
                  'CAR'
                 WHEN TYPE_INCIDENT IN ('N2', 'N3') THEN
                  'BUS'
              END TYPE_VEH,
              DEPARTMENT,
              COUNT(*) OVER (PARTITION BY CASE WHEN TYPE_V = 'N1' THEN 1 ELSE 0 END 
                             ORDER BY 1) TOT
         FROM DWH
        WHERE CODE = 'YES') 
 PIVOT(COUNT(DEPARTMENT) FOR DEPARTMENT IN('D1' AS D1,'D2' AS D2));

我只想使用条件聚合:

SELECT TYPE_VEH,
       AVG(CASE WHEN DEPARTMENT = 'D1' THEN 100.0 ELSE 0 END) as D1,
       AVG(CASE WHEN DEPARTMENT = 'D2' THEN 100.0 ELSE 0 END) as D2
FROM (SELECT (CASE WHEN TYPE_V = 'N1' THEN 'CAR'
                   WHEN TYPE_INCIDENT IN ('N2', 'N3') THEN 'BUS'
              END) AS TYPE_VEH,
              DWH.*
      FROM DWH
      WHERE CODE = 'YES'
     ) D
GROUP BY TYPE_VEH;

通常,您希望将此值作为一个数字。但是,如果要将其格式化为字符串,可以使用| |“%”来显示百分比时间。

我的答案以数字形式返回百分比,而其他答案则返回字符串。根据用例的不同,您可能更喜欢一种或另一种解决方案。。。