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.