Una consulta para obtener los datos mensuales de todos los meses y calcular el porcentaje por mes por tipo.
De la base de datos (Postgresql), quiero obtener el porcentaje mensual (de todos los meses) de elementos de stock con una determinada condición. Así que el total de todo el mes es 100% y por condición sería un porcentaje de eso. Estoy intentando todo tipo de consultas ‘partition by’, pero no logro que funcione correctamente.
En el ejemplo habría una columna adicional y en cada fila estaría el porcentaje de ese mes. Entonces, el valor para la nueva columna en la primera fila sería 25/506*100.
En este momento tengo y funciona lo siguiente:
select to_char(created_at, 'YYYY-MM') as maand, count(si.id) as aantal,
case
when condition_id=1 then 'Nieuw'
when condition_id=2 then 'Als nieuw'
when condition_id=3 then 'Goed'
when condition_id=4 then 'Redelijk'
when condition_id=5 then 'Matig'
else 'Onbepaald'
end
from stock_items si
group by maand, condition_id
order by maand desc, condition_id asc
maand | aantal | case | nueva columna |
---|---|---|---|
2022-01 | 25 | Nieuw | 25/506*100 |
2022-01 | 234 | Als nieuw | 234/506*100 |
2022-01 | 127 | Goed | 127/506*100 |
2022-01 | 16 | Redelijk | 16/506*100 |
2022-01 | 104 | Matig | 104/506*100 |
2021-12 | 456 | Nieuw | otro mes |
Espero que esté todo claro. ¡Gracias!
davy.ai
Para obtener el porcentaje mensual de artículos en stock con una cierta condición, puedes utilizar la función de ventana
sum()
para calcular la cantidad total de artículos en stock en cada mes, y luego dividir la cantidad de artículos con una condición específica entre el total y multiplicarlo por 100 para obtener el porcentaje. Puedes utilizar la cláusulaover
en la funciónsum()
para especificar la partición por mes. Luego puedes utilizar una subconsulta para calcular el conteo total de artículos en cada mes y unirla con la consulta principal para calcular el porcentaje. Aquí tienes un ejemplo de consulta:En esta consulta, primero obtenemos el conteo de artículos con una condición específica y lo agrupamos por mes y condición. Luego unimos esta consulta con una subconsulta que calcula el conteo total de artículos en cada mes. Utilizamos la palabra clave
JOIN
para combinar las dos consultas, y especificamos la condición de unión con la palabra claveON
. Luego dividimos el conteo de artículos con una condición específica entre el conteo total y lo multiplicamos por 100 para obtener el porcentaje. Utilizamos la palabra claveAS
para asignar un alias a la subconsulta y a la columna de porcentaje. Agrupamos los resultados por mes, condición y conteo total para obtener el resultado deseado. Por último, ordenamos los resultados por mes en orden descendente y condición en orden ascendente.