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)
1
respuesta

[Sugerencia] Corrección del código de Listando con expresión natural

Este es el código corregido

SELECT CONCAT(
    'El cliente ', TC.NOMBRE, 
    ' facturó ', SUM(IFa.CANTIDAD * IFa.precio), 
    ' en el año ', YEAR(MIN(F.FECHA_VENTA))
) AS FRASE  
FROM facturas F
INNER JOIN items_facturas IFa ON F.NUMERO = IFa.NUMERO
INNER JOIN tabla_de_clientes TC ON F.DNI = TC.DNI
WHERE YEAR(F.FECHA_VENTA) = 2016
GROUP BY TC.NOMBRE, YEAR(F.FECHA_VENTA);

Explicación de los cambios Se eliminó CONVERT(SUM(IFa.CANTIDAD * IFa.precio), CHAR(20))

SUM() ya devuelve un número. MySQL lo convertirá automáticamente a texto dentro de CONCAT(), por lo que CONVERT() es innecesario. Se eliminó CONVERT(YEAR(F.FECHA_VENTA), CHAR(20))

YEAR(MIN(F.FECHA_VENTA)) garantiza que F.FECHA_VENTA no rompa GROUP BY, ya que ahora se usa una función de agregación. Se usa MIN() o MAX() porque solo queremos obtener el año, y la función devolverá un valor único por cada grupo.

Esto garantiza que SUM(IFa.CANTIDAD * IFa.precio) se calcule correctamente para cada cliente y año.

1 respuesta
solución!

¡Hola!

Gracias por su aporte. Después de revisar los cambios que has hecho, parece que has eliminado las conversiones innecesarias y has utilizado la función de agregación YEAR(MIN(F.FECHA_VENTA)) para obtener el año de forma adecuada.

Sin embargo, veo que hay un pequeño error en la parte de la concatenación. Parece que falta un espacio después de "El cliente" y antes de "facturó". Además, es posible que necesites usar la función FORMAT() para dar formato al resultado numérico de la suma.

Aquí te dejo una versión corregida del código:

SELECT CONCAT(
    'El cliente ', TC.NOMBRE, 
    ' facturó ', FORMAT(SUM(IFa.CANTIDAD * IFa.precio), 2), 
    ' en el año ', YEAR(MIN(F.FECHA_VENTA))
) AS FRASE  
FROM facturas F
INNER JOIN items_facturas IFa ON F.NUMERO = IFa.NUMERO
INNER JOIN tabla_de_clientes TC ON F.DNI = TC.DNI
WHERE YEAR(F.FECHA_VENTA) = 2016
GROUP BY TC.NOMBRE, YEAR(F.FECHA_VENTA);

Espero que esta corrección te sea de ayuda. ¡Buena suerte con tu consulta SQL avanzada!

Espero haber ayudado y buenos estudios!

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