Solucionado (ver solución)
Solucionado
(ver solución)
2
respuestas

Duda y observación

Buenas. Comparto mi solucion de beginner

SELECT YEAR(FASE1.FECHA_VENTA), CONCAT(
FASE1.NOMBRE," facturó ", 
FLOOR(SUM(ITF.CANTIDAD*(ITF.PRECIO*FASE1.IMPUESTO))),
"en el año ",YEAR(FASE1.FECHA_VENTA)
)
FROM (
SELECT TC.NOMBRE, F.NUMERO, F.IMPUESTO,F.FECHA_VENTA
FROM TABLA_DE_CLIENTES TC
INNER JOIN FACTURAS F
ON F.DNI = TC.DNI
) FASE1
INNER JOIN ITEMS_FACTURAS ITF
ON FASE1.NUMERO = ITF.NUMERO
WHERE YEAR(FASE1.FECHA_VENTA) = 2016
GROUP BY FASE1.NOMBRE, YEAR(fase1.fecha_venta);

Además, me di cuenta que mi error es considerar los impuestos. Según esta pagina aqui, significa que no se debe considerar los impuestos en la facturación, mi error fue considerarlo.

Si no se considera el resultado es:

SELECT YEAR(FASE1.FECHA_VENTA) AS AÑO, CONCAT(
FASE1.NOMBRE," facturó ", 
FLOOR(SUM(ITF.CANTIDAD*(ITF.PRECIO))),
"en el año ",YEAR(FASE1.FECHA_VENTA)
) AS SENTENCE
FROM (
SELECT TC.NOMBRE, F.NUMERO, F.IMPUESTO,F.FECHA_VENTA
FROM TABLA_DE_CLIENTES TC
INNER JOIN FACTURAS F
ON F.DNI = TC.DNI
) FASE1
INNER JOIN ITEMS_FACTURAS ITF
ON FASE1.NUMERO = ITF.NUMERO
WHERE YEAR(FASE1.FECHA_VENTA) = 2016
GROUP BY FASE1.NOMBRE, YEAR(fase1.fecha_venta);

Es decir: Ingrese aquí la descripción de esta imagen para ayudar con la accesibilidad

2 respuestas
solución!

¡Hola Edsel!

Gracias por compartir tu solución y por señalar el error que encontraste al considerar los impuestos en la facturación. Es importante tener en cuenta los detalles como este al realizar consultas SQL.

En base a la actividad que mencionas, parece que quieres obtener una lista de clientes junto con la cantidad total facturada por cada uno en el año 2016. La consulta que proporcionaste parece estar en el camino correcto, pero podemos hacer algunos ajustes para obtener el resultado deseado.

Aquí tienes una versión modificada de tu consulta:

SELECT CONCAT("El cliente ", FASE1.NOMBRE, " facturó ", FLOOR(SUM(ITF.CANTIDAD * ITF.PRECIO)), " en el año 2016") AS SENTENCIA
FROM (
    SELECT TC.NOMBRE, F.NUMERO, F.FECHA_VENTA
    FROM TABLA_DE_CLIENTES TC
    INNER JOIN FACTURAS F ON F.DNI = TC.DNI
    WHERE YEAR(F.FECHA_VENTA) = 2016
) FASE1
INNER JOIN ITEMS_FACTURAS ITF ON FASE1.NUMERO = ITF.NUMERO
GROUP BY FASE1.NOMBRE;

En esta consulta, hemos realizado los siguientes cambios:

  1. Eliminamos la columna FASE1.IMPUESTO de la subconsulta, ya que no es necesario considerar los impuestos en la facturación.
  2. Movimos la condición WHERE YEAR(F.FECHA_VENTA) = 2016 a la subconsulta, para filtrar solo las facturas del año 2016.
  3. Cambiamos la columna de resultado a CONCAT("El cliente ", FASE1.NOMBRE, " facturó ", FLOOR(SUM(ITF.CANTIDAD * ITF.PRECIO)), " en el año 2016") AS SENTENCIA, de acuerdo con la descripción que mencionaste.

Espero que esta versión modificada de la consulta te ayude a obtener el resultado deseado. Si tienes alguna otra pregunta, no dudes en preguntar. ¡Buena suerte con tus estudios!

Espero haber ayudado y ¡buenos estudios!

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

Tu consulta esta mucho mas limpia que la mía y más eficiente. Antes de generar el segundo inner join, te aseguras de que solo salga de la subconsulta facturas del 2016.

Así, el 2do inner join ya no carga con una tabla tan grande(como en mi consulta xd).

Eso de las subconsultas ayuda bastante para abstraer tablas. Muchas gracias