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;
通常,您希望将此值作为一个数字。但是,如果要将其格式化为字符串,可以使用| |“%”来显示百分比时间。我的答案以数字形式返回百分比,而其他答案则返回字符串。根据用例的不同,您可能更喜欢一种或另一种解决方案。。。