Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
1
respuesta

DUDA SOBRE ACTIVIDAD 9 DEL AULA 5

Estimados, los siguientes comandos de SQL no agrupan por cada cliente ya que cuando intento agrupar por "nombre" añadiendo solo la columna NOMBRE al group by, arroja error ya que el Workbench considera que se debe agrupar tambien por FECHA_VENTA pero al mismo tiempo necesito agregar esta columna en el SELECT al efecto de que sea dinamico y pueda cambiar el texto cuando cambia el año selecciinado en en WHERE:

SELECT CONCAT('El cliente ', A.NOMBRE, ' facturó ', ROUND(SUM(CANTIDAD * PRECIO)), 
' en el año ', YEAR(A.FECHA_VENTA)) AS FACTURACION_CLIENTES
FROM (SELECT A.NOMBRE, B.NUMERO, B.FECHA_VENTA 
FROM tabla_de_clientes A
INNER JOIN facturas B
ON A.DNI = B.DNI) A
INNER JOIN items_facturas B
ON A.NUMERO = B.NUMERO WHERE YEAR(A.FECHA_VENTA)=2016
GROUP BY A.NOMBRE,  A.FECHA_VENTA;

Si quito del GROUP BY "A.FECHA_VENTA" aparece el siguiente mensaje de error: "Error Code: 1055. Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'A.FECHA_VENTA' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by".

Segun parece todos los campos del SELECT deben ser utilizados en el agrupamiento pero yo deseo utilizar UNA SOLA COLUMNA del select.

¿Alguna idea de como puedo hacerlo?

Gracias por cualquier orientacion que puedan darme.

1 respuesta

¡Hola Estudante!

Entiendo que estás teniendo problemas para agrupar por el campo "nombre" en la consulta SQL que estás realizando en la actividad 9 del aula 5. El error que estás obteniendo se debe a que la columna "FECHA_VENTA" no se encuentra en el GROUP BY y no está funcionalmente dependiente de las columnas en el GROUP BY (como lo indica el mensaje de error).

Una posible solución sería utilizar una subconsulta para obtener la suma de la cantidad y el precio, y luego unir esta subconsulta con la tabla de clientes y facturas para obtener el nombre y la fecha de venta. De esta forma, podrías agrupar solo por el nombre y obtener la suma de la cantidad y el precio para cada cliente.

Aquí te dejo un ejemplo de cómo podría ser la consulta:

SELECT CONCAT('El cliente ', A.NOMBRE, ' facturó ', ROUND(B.total), 
' en el año ', YEAR(A.FECHA_VENTA)) AS FACTURACION_CLIENTES
FROM (SELECT A.NOMBRE, B.NUMERO, B.FECHA_VENTA 
FROM tabla_de_clientes A
INNER JOIN facturas B
ON A.DNI = B.DNI) A
INNER JOIN (SELECT NUMERO, SUM(CANTIDAD * PRECIO) AS total
            FROM items_facturas
            GROUP BY NUMERO) B
ON A.NUMERO = B.NUMERO
WHERE YEAR(A.FECHA_VENTA)=2016
GROUP BY A.NOMBRE;

Espero que esta solución te sea de ayuda. Si tienes alguna otra duda, no dudes en preguntar. ¡Espero haber ayudado y buenos estudios!

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