Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

[Duda] Creo que hay un error en la resolución

Me pareció muy bueno el ejercicio, pero a raíz de una diferencia con uno de los registros empecé a mirar más detalladamente.

Me parece que el % con el que se filtran los resultados está invertido: En la resolución se indica en el WHERE final esta cláusula

ROUND((1 - (A.CANTIDAD_MAXIMA/A.CANTIDAD_VENDIDA)) * 100,2)

Pero debería ser

ROUND((1 - (A.CANTIDAD_VENDIDA/A.CANTIDAD_MAXIMA)) * 100,2)

Esto se debe a que el 100% que se debería tomar es el límite de ventas máximas permitidas que sale del volumen de compras.

Es decir de la manera en la que está resuelto, el volumen que representa el 100% es lo que se vendió, de manera que hay un caso donde se vende por encima de un 50% adicional al límite máximo que no sale con la resolución propuesta.

¿Les pasa lo mismo?

Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidadEsta es la solución a la que llegué yo donde agrego algunas columnas para que se vean las ventas, el límite y la diferencia:

SELECT A.DNI, A.NOMBRE, A.MES_AÑO, CONCAT(ROUND((100*(A.CANTIDAD_VENDIDA - A.CANTIDAD_MAXIMA)/A.CANTIDAD_MAXIMA),1), ' %') AS DIFERENCIA_PORCENTUAL,
A.CANTIDAD_VENDIDA, A.CANTIDAD_MAXIMA, A.CANTIDAD_VENDIDA - A.CANTIDAD_MAXIMA AS DIFERENCIA_NUMERICA,
CASE
    WHEN A.CANTIDAD_VENDIDA - A.CANTIDAD_MAXIMA < 0 THEN 'Venta Válida'
    ELSE 'Venta Inválida'
END AS STATUS_VENTA
FROM (
SELECT F.DNI, TC.NOMBRE, DATE_FORMAT(F.FECHA_VENTA, '%m - %Y') AS MES_AÑO,
SUM(IFa.CANTIDAD) AS CANTIDAD_VENDIDA,
MAX(VOLUMEN_DE_COMPRA)/10 AS CANTIDAD_MAXIMA
FROM
facturas F
INNER JOIN
items_facturas IFa
ON F.NUMERO = IFa.NUMERO
INNER JOIN
tabla_de_clientes TC
ON TC.DNI = F.DNI
GROUP BY F.DNI, TC.NOMBRE, DATE_FORMAT(F.FECHA_VENTA, '%m - %Y')
) A
WHERE MES_AÑO LIKE '%2018' AND (A.CANTIDAD_VENDIDA - A.CANTIDAD_MAXIMA)/A.CANTIDAD_MAXIMA > 0.5;

Acá dejo la resolución propuesta en la clase con columnas adicionales también para ver lo que indico:

SELECT A.DNI, A.NOMBRE, A.MES_AÑO, 
A.CANTIDAD_VENDIDA - A.CANTIDAD_MAXIMA AS DIFERENCIA,
A.CANTIDAD_VENDIDA, A.CANTIDAD_MAXIMA,
CASE
   WHEN  (A.CANTIDAD_VENDIDA - A.CANTIDAD_MAXIMA) <= 0 THEN 'Venta Válida'
   ELSE 'Venta Inválida'
END AS STATUS_VENTA, ROUND((1 - (A.CANTIDAD_MAXIMA/A.CANTIDAD_VENDIDA)) * 100,2) AS PORCENTAJE
 FROM(
SELECT F.DNI, TC.NOMBRE, DATE_FORMAT(F.FECHA_VENTA, "%m - %Y") AS MES_AÑO, 
SUM(IFa.CANTIDAD) AS CANTIDAD_VENDIDA, 
MAX(VOLUMEN_DE_COMPRA)/10 AS CANTIDAD_MAXIMA  
FROM facturas F 
INNER JOIN 
items_facturas IFa
ON F.NUMERO = IFa.NUMERO
INNER JOIN 
tabla_de_clientes TC
ON TC.DNI = F.DNI
GROUP BY
F.DNI, TC.NOMBRE, DATE_FORMAT(F.FECHA_VENTA, "%m - %Y"))A
WHERE (A.CANTIDAD_MAXIMA - A.CANTIDAD_VENDIDA) < 0 AND ROUND((1 - (A.CANTIDAD_MAXIMA/A.CANTIDAD_VENDIDA)) * 100,2) > 50
AND A.MES_AÑO LIKE "%2018";
2 respuestas
solución!

¡Hola Daniel!

Gracias por compartir tu duda con nosotros. Es muy interesante lo que mencionas sobre la inversión del filtro en la consulta.

En cuanto a la solución propuesta en la clase, parece que se está utilizando la fórmula incorrecta para calcular el porcentaje. Como mencionas, la fórmula correcta debería ser:

ROUND((1 - (A.CANTIDAD_VENDIDA/A.CANTIDAD_MAXIMA)) * 100,2)

En lugar de:

ROUND((1 - (A.CANTIDAD_MAXIMA/A.CANTIDAD_VENDIDA)) * 100,2)

Es importante que los filtros sean precisos para obtener los resultados correctos.

Gracias por compartir también tu solución con las columnas adicionales. ¡Es muy útil para entender mejor el problema!

Espero haber ayudado y buenos estudios.

Si este post te ayudó, por favor, marca como solucionado ✓. Continúa con tus estudios! :)

Muchas gracias Rafaela por tu devolución, muy clara.

Me alegro de haber podido aportar con esta duda.

Saludos!