我如何计算 SQL 中占总数的百分比?
How could I calculate the percentage of total in SQL?
我正在使用 postgreSQL 创建一个查询,该查询能够根据类别(列“modelo_venta”)计算总数的百分比,并且还有其他不同的列,我试过了如下所示,但效果不佳,当我总结百分比时我没有得到 100%:
SELECT
pais,
estatus,
centro,
drv,
uen,
agencia,
modelo_venta,
Sum(fuera_ruta_volumen_cartones) as fuera_ruta_volumen_cartones,
Sum(fuera_ruta_volumen_hectolitros) as fuera_ruta_volumen_hectolitros,
round(cast(count(modelo_venta) * 100.0 / (select count(*) FROM reporting_services.vw_mx_log_icaro_modelo_servicio_fuera_ruta) as numeric),3) as porcentaje,
fecha_reparto
FROM
reporting_services.vw_mx_log_icaro_modelo_servicio_fuera_ruta
WHERE
modelo_venta IS NOT NULL
and motivo_fuera_ruta = 'Otros Motivos'
group by
pais,
estatus,
centro,
drv
uen,
agencia,
modelo_venta,
fuera_ruta_volumen_cartones,
fuera_ruta_volumen_hectolitros,
fecha_reparto
ORDER BY
porcentaje DESC
输出是这样的:
modelo_ventas
porcentaje
A
.0002
B
.10
C
.10
D
.003
所需的输出类似于:
modelo_ventas
porcentaje
A
40
B
40
C
10
D
10
伙计们,你们知道这里出了什么问题吗?顺便说一句,致以最诚挚的问候。
尝试使用 window 函数:
count(modelo_venta) * 100.0 / sum(count(modelo_venta)) over () as porcentaje,
问题是您要根据查询结果进行计数,而不是整个 table。
我正在使用 postgreSQL 创建一个查询,该查询能够根据类别(列“modelo_venta”)计算总数的百分比,并且还有其他不同的列,我试过了如下所示,但效果不佳,当我总结百分比时我没有得到 100%:
SELECT
pais,
estatus,
centro,
drv,
uen,
agencia,
modelo_venta,
Sum(fuera_ruta_volumen_cartones) as fuera_ruta_volumen_cartones,
Sum(fuera_ruta_volumen_hectolitros) as fuera_ruta_volumen_hectolitros,
round(cast(count(modelo_venta) * 100.0 / (select count(*) FROM reporting_services.vw_mx_log_icaro_modelo_servicio_fuera_ruta) as numeric),3) as porcentaje,
fecha_reparto
FROM
reporting_services.vw_mx_log_icaro_modelo_servicio_fuera_ruta
WHERE
modelo_venta IS NOT NULL
and motivo_fuera_ruta = 'Otros Motivos'
group by
pais,
estatus,
centro,
drv
uen,
agencia,
modelo_venta,
fuera_ruta_volumen_cartones,
fuera_ruta_volumen_hectolitros,
fecha_reparto
ORDER BY
porcentaje DESC
输出是这样的:
modelo_ventas | porcentaje |
---|---|
A | .0002 |
B | .10 |
C | .10 |
D | .003 |
所需的输出类似于:
modelo_ventas | porcentaje |
---|---|
A | 40 |
B | 40 |
C | 10 |
D | 10 |
伙计们,你们知道这里出了什么问题吗?顺便说一句,致以最诚挚的问候。
尝试使用 window 函数:
count(modelo_venta) * 100.0 / sum(count(modelo_venta)) over () as porcentaje,
问题是您要根据查询结果进行计数,而不是整个 table。