Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] mysql duda obteniendo sumatoria de campos

Estas en el tema de mysql duda obteniendo sumatoria de campos en el foro de Mysql en Foros del Web. Hola y buenos dias ,este es mi primer tema , siempre reviso foros del web por que es uno de los pocos foros donde responden ...
  #1 (permalink)  
Antiguo 02/07/2012, 23:43
 
Fecha de Ingreso: julio-2012
Ubicación: en una cueva
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
mysql duda obteniendo sumatoria de campos

Hola y buenos dias ,este es mi primer tema , siempre reviso foros del web por que es uno de los pocos foros donde responden dudas y no te responden con un tajante : GOOGLEALO NOVATO!!. de todas maneras la duda ya la googlee y no encontre solucion.

Dejando el preambulo atras, les presento mi problema, estoy aprendiendo mysql por mi cuenta:

estas son las tablas de mi base de datos

CREATE DATABASE IF NOT EXISTS tiendita

CREATE TABLE IF NOT EXISTS `clientes` (
`CodCli` varchar(5) NOT NULL,
`NomCli` varchar(15) NOT NULL
) ;



CREATE TABLE IF NOT EXISTS `detalle` (
`NumFac` int(15) NOT NULL,
`CodProd` varchar(15) NOT NULL,
`Cant` int(5) NOT NULL
);




CREATE TABLE IF NOT EXISTS `facturas` (
`NumFac` int(15) NOT NULL,
`CodFac` varchar(15) NOT NULL,
`Monto` float NOT NULL
) ;


CREATE TABLE IF NOT EXISTS `productos` (
`CodProd` varchar(15) NOT NULL,
`NomProd` varchar(15) NOT NULL,
`Existencia` int(9) NOT NULL,
`Alicuota` int(3) NOT NULL,
`Precio` float NOT NULL,
`Costo` float NOT NULL
) ;


Quiero obtener un lista que muestre de cada factura los siguientes datos
numero de la factura, nombre del cliente y el total de productos con alicuota en igual a cero de cada factura
ejemplo :


[I]NumFac NomCli productosExentos
1 juan 0
2 pepe 3
3 ana 2[/I]


yo hice esta consulta


SELECT factura.NumFac, cliente.NomCli, COUNT( alicuota )
FROM detalle, producto, cliente, factura
WHERE producto.CodProd = detalle.CodProd
AND cliente.CodCli = factura.CodCli
GROUP BY factura.NumFac


sin embargo en vez de los producto con alicuota igual a cero de cada factura, me devuelve la cantidad de productos con alicuota igual a cero en toda al tabla :
ejemplo: si hay 8 productos en factura con alicuota igual a cero

NumFac NomCli productosExentos
1 juan 8
2 pepe 8
3 ana 8


agradesco desde ahora cualquier ayuda (o critica).
  #2 (permalink)  
Antiguo 03/07/2012, 01:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: mysql duda obteniendo sumatoria de campos

Código MySQL:
Ver original
  1. SELECT facturas.NumFac, clientes.NomCli, COUNT(*)
  2. FROM ((detalle INNER JOIN productos ON productos.CodProd = detalle.CodProd)
  3.                        INNER JOIN facturas ON detalle.NumFac=facturas.NumFac)
  4.                        INNER JOIN clientes ON clientes.CodCli = facturas.CodCli
  5. WHERE productos.alicuota=0
  6. GROUP BY facturas.NumFac, clientes.NomCli;

Usa JOIN

Planteate:

- que va a pasar con las facturas antiguas si el precio de un producto cambia.
- como introduciras un posible descuento sobre el precio de un producto o sobre el total de factura.
- donde se reflejan los impuestos indirectos (IVA...) y sus distintos tipos por producto
- si es necesario tener el campo calculado "monto" en facturas
....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 03/07/2012 a las 01:28
  #3 (permalink)  
Antiguo 03/07/2012, 02:27
 
Fecha de Ingreso: julio-2012
Ubicación: en una cueva
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
De acuerdo Respuesta: mysql duda obteniendo sumatoria de campos

::SOLUCIONADO::

muchisimas gracias por responder quimfv no esperaba una respuesta tan rapida y acertada,aunque tuve un inconveniente con tu consulta:
al mostrar la lista, me muestra la cantidad de productos exentos de alicuota en la factura,
pero sin tener en cuenta la cantidad de ese producto que se compro, ejemplifico
si alguien compra 5 unidades de producto sin alicuota A y 6 unidades de otro producto sin alicuta B me dira que su factura tiene 2 productos sin alicuta (que es cierto), yo esperaba que diga que tiene 11 productos sin alicuota .

asi que tomando tu consulta como guia, en un momento de inspiracion; cambie la funcion count por sum y PERFECT!


Código MySQL:
Ver original
  1. SELECT facturas.NumFac, clientes.NomCli,  SUM(detalle.Cant)  as productosExentos
  2. FROM ((detalle INNER JOIN productos ON productos.CodProd = detalle.CodProd)
  3.                        INNER JOIN facturas ON detalle.NumFac=facturas.NumFac)
  4.                        INNER JOIN clientes ON clientes.CodCli = facturas.CodCli
  5. WHERE productos.alicuota=0
  6. GROUP BY facturas.NumFac, clientes.NomCli;

ahora me doy cuenta que el problema no era de count sino de SUM.

Sobre tus planteamientos, se me ocurre

ten en cuenta que esto es solo una practica que me propuse para aprender mysql y como practica no esta demas
aprender como organizar una base de datos


- que va a pasar con las facturas antiguas si el precio de un producto cambia.
deberia quitar el campo monto de la factura y calcularlo al vuelo cuando lo necesite

- como introduciras un posible descuento sobre el precio de un producto o sobre el total de factura.
si no tengo un campo monto,podria tambien calcularlo al vuelo al momento de hacer la factura

- donde se reflejan los impuestos indirectos (IVA...) y sus distintos tipos por producto
esta si me deja desconcertado, pensaba que solo el campo alicuota (que viene siendo en impuesto)
serviria para este proposito

- si es necesario tener el campo calculado "monto" en facturas
tienes razon, es inecesario, ademas descuadra los precios si cambio el precio de un producto
  #4 (permalink)  
Antiguo 03/07/2012, 04:21
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: mysql duda obteniendo sumatoria de campos

Cita:
- que va a pasar con las facturas antiguas si el precio de un producto cambia.
deberia quitar el campo monto de la factura y calcularlo al vuelo cuando lo necesite
No solo eso si no que debes guardar el precio aplicado en el momento de la factura, si no una factura tendrá un valor distinto cada vez que la consultes... donde guardar ese precio te lo dejo para que lo resuelvas....

Cita:
- como introduciras un posible descuento sobre el precio de un producto o sobre el total de factura.
si no tengo un campo monto,podria tambien calcularlo al vuelo al momento de hacer la factura
Sobre precio del producto se resuelve igual que en el primer comentario. Sobre el total de factura.... en la factura pero sin monto.


Cita:
- donde se reflejan los impuestos indirectos (IVA...) y sus distintos tipos por producto
esta si me deja desconcertado, pensaba que solo el campo alicuota (que viene siendo en impuesto)
serviria para este proposito
Correcto si alicuota tiene ese sentido, pero tambien puede cambiar con el tiempo... por lo tanto......

Cita:
- si es necesario tener el campo calculado "monto" en facturas
tienes razon, es inecesario, ademas descuadra los precios si cambio el precio de un producto
Correcto

Me parece un buen ejercicio para aprender pero debes preguntarte todas esas posibilidades para mejorar el diseño... el trabajo con bbdd no consiste en un tema de sintaxis de pregramación si no de reflejar la realidad.... una factura que tiene valores distintos en función del momento que se calcula no forma parte de la realidad.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 03/07/2012 a las 04:30
  #5 (permalink)  
Antiguo 03/07/2012, 06:29
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: mysql duda obteniendo sumatoria de campos

Cita:
- donde se reflejan los impuestos indirectos (IVA...) y sus distintos tipos por producto
esta si me deja desconcertado, pensaba que solo el campo alicuota (que viene siendo en impuesto) serviria para este proposito
Vamos a hacer una aclaración: Los impuestos al consumo, como el caso del IVA no se aplican los productos, sino a las operaciones. Lo que significa que el IVA se aplica sobre el monto de la factura, y no sobre cada producto individualmente, porque se aplican en función de la condición impositiva del cliente.
Lo que sí existen en algunos casos son impuestos aplicados sobre productos, o descuentos de ciertos impuestos, pero siempre están relacionados con la condición impositiva del cliente.
Hay muchas otras consideraciones a tomar sobre la base del tema impositivo, que impactan mucho sobre el diseño de la base y los procesos de la aplicación.
No es un tema simple, que se pueda resolver con un sólo campo en una tabla.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 03/07/2012, 06:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: mysql duda obteniendo sumatoria de campos

Si cada legislación establece unas reglas distintas. El caso del IVA en Europa si se aplica al producto y no depende del cliente, en una misma factura puedes tener productos con distintos tipos impositivos, luego en este caso si se podria resolver con un campo para guardar el tipo en la tabla detalle y otro para el precio aplicado.

Pero como bien dices no hay una solución general puesto que cada normativa local impone sus reglas.

Cita:
snchzantonio
Mensajes: 2 Karma: n/a
Ubicación: en una cueva
en las cuevas no se como será
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 03/07/2012, 06:48
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: mysql duda obteniendo sumatoria de campos

¡Ojalá tuviésemos aquí IVA diferenciado por producto!
Es el más regresivo de los impuestos, pero que más recaudación da, y que el usuario final no puede descontar con nada...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 03/07/2012, 06:52
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: mysql duda obteniendo sumatoria de campos

Diferenciado por algunos grupos de productos !!! Libros, alimentación y pocos mas. Esta el general para casi todo y algunos productos con IVA reducido... Tampoco es igual para todos los paises de la UE asi nos va!!! Y si el usuario final no puede hacer mas que pagar.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #9 (permalink)  
Antiguo 03/07/2012, 11:29
 
Fecha de Ingreso: julio-2012
Ubicación: en una cueva
Mensajes: 6
Antigüedad: 11 años, 9 meses
Puntos: 0
Respuesta: mysql duda obteniendo sumatoria de campos

interesante, pensaba que lo tenia todo resuelto, pero tienen razon hay muchas cosas que pase por alto, tendre que investigar eso de los impuestos.

Muchisimas gracias por su ayuda y las reflecciones

Etiquetas: campos, select, sql, sumatoria, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:17.