Buenas Estuve realizando las consultas y me quedo la duda donde dice: *Ahora lista solamente a los que tuvieron ventas inválidas en el año 2018 excediendo más del 50% de su límite permitido por mes. *
Asi que mi ejemplo era Siendo A el limite permitido y B el volumen comprado, entonces debemos calcular si se ha excedido por más de 50% el limite Entonces:
- B - A : nos da en cuanto se ha excedido la compra
- Para saber si es más del 50% debe ser:
( B - A ) / A > 50%
- Es decir :
B/A - 1 > 1/2
- Asi que para calcular en cuando se excedió, solamente calculamos la anterior formula:
El codigo seria:
SELECT FASE1.DNI, FASE1.MES_AÑO, FASE1.CANTIDAD_VENDIDA, FASE1.CANTIDAD_MAXIMA,
CASE
WHEN (FASE1.CANTIDAD_VENDIDA/FASE1.CANTIDAD_MAXIMA -1) > 0.5
THEN CONCAT("SE EXEDIO EN ",ROUND((FASE1.CANTIDAD_VENDIDA/FASE1.CANTIDAD_MAXIMA -1)*100,2),"%")
ELSE "SE EXCEDIO POR MENOS DE 50%"
END AS TAG_VALIDACION,
FASE1.CANTIDAD_MAXIMA-FASE1.CANTIDAD_VENDIDA AS GAP
FROM
(
SELECT F.DNI,TC.NOMBRE,
DATE_FORMAT(F.FECHA_VENTA, '%m - %Y') AS MES_AÑO,
SUM(ITF.CANTIDAD) AS CANTIDAD_VENDIDA,
MAX(TC.VOLUMEN_DE_COMPRA)/10 AS CANTIDAD_MAXIMA
FROM FACTURAS F
INNER JOIN ITEMS_FACTURAS ITF
ON F.NUMERO = ITF.NUMERO
INNER JOIN TABLA_dE_CLIENTES TC
ON TC.DNI = F.DNI
GROUP BY F.DNI, TC.NOMBRE, MES_AÑO
HAVING CANTIDAD_VENDIDA > CANTIDAD_MAXIMA
) FASE1
WHERE MES_AÑO LIKE '%2018' AND (FASE1.CANTIDAD_VENDIDA/FASE1.CANTIDAD_MAXIMA -1) > 0.5
;
A continuación se muestra la tabla resultante: En el problema, la formula calcula el complemento del porcentaje de la diferencia entre lo permitido y lo no permitido. Para saber realmente en cuanto porcentaje X de una cantidad esta sobre la otra exactamente, se debería poder hacer esto:
- A: Cantidad permitida
- B: Cantidad comprada
- X: % de exceso de B sobre A
- A*X = B - A
- Pues X nos diría: El exceso de B-A esta X% por encima de A.
- Y como se dijo anteriormente X es : B/A - 1 Por lo que la respuesta se puede comprobar con multiplicar lo anterior:
: Indicando realmente que la tabla siguiente es correcta: Si hay algun error, quedo atento a cualquier respuesta.