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

La solución dada del ejercicio lanza el error 1055. ¿Cómo solucionarlo?

La solución dada por el equipo de Alura es la siguiente:

SELECT 
    CONCAT('El cliente ', 
            TC.NOMBRE, 
            ' facturó ', 
            CONVERT(SUM(IFa.CANTIDAD * IFa.precio), CHAR(20)),
            ' en el año ', 
            CONVERT(YEAR(F.FECHA_VENTA), CHAR(20))) 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(FECHA_VENTA) = 2016
GROUP BY 
    TC.NOMBRE, 
    YEAR(FECHA_VENTA);

En la línea 7 debemos de poner la expresión ANY_VALUE después del YEAR:

CONVERT(YEAR(ANY_VALUE(F.FECHA_VENTA)), CHAR(20))) AS FRASE FROM facturas F

Y listo, la consulta se ejecutará de forma correcta

1 respuesta
solución!

Hola Yahadad, espero que estés bien

El error 1055 en MySQL generalmente ocurre cuando intentamos seleccionar columnas que no están en una función de agregación o en la cláusula GROUP BY. En tu caso, el problema parece estar relacionado con la función YEAR(F.FECHA_VENTA) que no está siendo manejada correctamente en la cláusula SELECT debido a la agregación.

Tu solución de usar ANY_VALUE es una forma de abordar este problema, ya que permite seleccionar un valor arbitrario de un grupo de resultados. Esto es útil cuando el valor seleccionado no afecta el resultado de la consulta debido a la agregación.

Aquí tienes un ejemplo de cómo podrías ajustar la consulta para evitar el error 1055:

SELECT 
    CONCAT('El cliente ', 
            TC.NOMBRE, 
            ' facturó ', 
            CONVERT(SUM(IFa.CANTIDAD * IFa.precio), CHAR(20)),
            ' en el año ', 
            CONVERT(YEAR(ANY_VALUE(F.FECHA_VENTA)), CHAR(20))) 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(FECHA_VENTA) = 2016
GROUP BY 
    TC.NOMBRE;

Al usar ANY_VALUE, le estás diciendo a MySQL que puede tomar cualquier valor de F.FECHA_VENTA dentro de cada grupo, lo cual es suficiente para tu propósito, ya que todos los valores deberían ser del año 2016 debido a la cláusula WHERE.

Espero que esta explicación te sea de ayuda y que la consulta funcione correctamente. Espero haber ayudado y ¡buenos estudios!