[Php-avanzado] Proyecciones SQL
Leonardo Tadei - Pegasus Tech Supply
leonardot en pegasusnet.com.ar
Sab Jul 6 23:08:07 ART 2013
Ok.
El sáb, 06-07-2013 a las 22:25 -0300, Ariel Fernández escribió:
> ok, entonces el e queda asi:
>
>
> SELECT round(AVG( precio ),2) AS "Precio promedio" FROM productos
> consulta SQL: SELECT round(AVG( precio ),2) AS "Precio promedio" FROM
> productos LIMIT 0, 30 ;
> Filas: 1
>
>
>
>
> Precio promedio
>
> 12.04
>
>
>
>
>
>
>
>
>
>
> Sí, las querys me dan respuestas coherentes:
>
>
>
>
> A:
> consulta SQL: SELECT P.codigo, P.descripcion, P.precio,
> S.cantidad,A.nombre FROM (productos as P) join stock as S on
> p.id=s.id_producto join almacenes as A on s.id_almacen=a.id group by
> s.id_almacen,s.id_producto LIMIT 0, 30 ;
> Filas: 12
>
>
>
>
> codigo
> descripcion
> precio
> cantidad
> nombre
>
> 4040
> ayudin x1L
> 6.50
> 400
> almacen 1
> 4041
> ayudin x2L
> 12.75
> 320
> almacen 1
> 4042
> ayudin x3L
> 17.55
> 680
> almacen 1
> 4043
> ayudin ropa
> blanca x1L
> 10.45
> 2560
> almacen 1
> 3003
> seiseme
> jabon x300
> 4.85
> 6650
> almacen 1
> 48686
> coloso
> lavandina
> x5L
> 20.15
> 0
> almacen 1
> 4040
> ayudin x1L
> 6.50
> 150
> almacen 2
> 4041
> ayudin x2L
> 12.75
> 95
> almacen 2
> 4042
> ayudin x3L
> 17.55
> 276
> almacen 2
> 4043
> ayudin ropa
> blanca x1L
> 10.45
> 1980
> almacen 2
> 3003
> seiseme
> jabon x300
> 4.85
> 3480
> almacen 2
> 48686
> coloso
> lavandina
> x5L
> 20.15
> 0
> almacen 2
>
>
>
>
>
>
>
>
> B:
> consulta SQL: SELECT P.codigo, P.descripcion, P.precio,
> SUM( S.cantidad ) as Stock FROM (productos AS P, stock AS S) WHERE
> p.id = s.id_producto GROUP BY s.id_producto, p.descripcion HAVING
> SUM( s.cantidad ) > 590 LIMIT 0, 30 ;
> Filas: 3
>
>
>
>
> codigo
> descripcion
> precio
> Stock
>
> 4042
> ayudin x3L
> 17.55
> 956
> 4043
> ayudin ropa
> blanca x1L
> 10.45
> 4540
> 3003
> seiseme jabon
> x300
> 4.85
> 10130
>
>
>
>
>
>
>
>
> C:
> consulta SQL: SELECT A.nombre, sum(S.cantidad) as "Stock Total" FROM
> (almacenes as A, stock as S) where A.id=S.id_almacen group by
> S.id_almacen order by A.nombre LIMIT 0, 30 ;
> Filas: 2
>
>
>
>
> nombre
> Stock Total
>
> almacen 1
> 10610
> almacen 2
> 5981
>
>
>
>
>
>
>
>
>
>
> D:
> consulta SQL: select count(id) as "Cantidad de articulos" from
> productos;
> Filas: 1
>
>
>
>
> Cantidad de articulos
>
> 6
>
>
>
>
>
>
>
>
> F:
> consulta SQL: SELECT A.nombre as "Almacen", P.descripcion,
> sum(S.cantidad) as "Stock" FROM (almacenes as A) JOIN stock as S on
> A.id=S.id_almacen JOIN productos as P on S.id_producto=P.id GROUP BY
> S.id_almacen,P.codigo LIMIT 0, 30 ;
> Filas: 12
>
>
>
>
> Almacen
> descripcion
> Stock
>
> almacen 1
> seiseme jabon
> x300
> 6650
> almacen 1
> ayudin x1L
> 400
> almacen 1
> ayudin x2L
> 320
> almacen 1
> ayudin x3L
> 680
> almacen 1
> ayudin ropa
> blanca x1L
> 2560
> almacen 1
> coloso lavandina
> x5L
> 0
> almacen 2
> seiseme jabon
> x300
> 3480
> almacen 2
> ayudin x1L
> 150
> almacen 2
> ayudin x2L
> 95
> almacen 2
> ayudin x3L
> 276
> almacen 2
> ayudin ropa
> blanca x1L
> 1980
> almacen 2
> coloso lavandina
> x5L
> 0
>
>
>
>
>
>
>
>
> G:
> consulta SQL: SELECT A.nombre as "Almacen", round(avg(P.precio),2) as
> "Precio Promedio" FROM (almacenes as A) JOIN stock as S on
> A.id=S.id_almacen JOIN productos as P on P.id=S.id_producto GROUP BY
> S.id_almacen LIMIT 0, 30 ;
> Filas: 2
>
>
>
>
> Almacen
> Precio Promedio
>
> almacen 1
> 12.04
> almacen 2
> 12.04
>
> En éste da el mismo promedio porque en las dos almacenes tengo los
> mismos productos, sólo varían los stocks.
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
> El 6 de julio de 2013 21:56, Leonardo Tadei - Pegasus Tech Supply
> <leonardot en pegasusnet.com.ar> escribió:
> Hola Ariel,
>
> El sáb, 06-07-2013 a las 20:05 -0300, Ariel Fernández
> escribió:
> > Hola Leo, cómo estás?
>
> Queriendo terminar la semana ;-)
>
> > Duda: en las proyecciones, inciso e:
> > precios promedio de los productos
> > indicas que hay que proyectar cod, des, prod, promedio
> >
> >
> > pero, qué promedio ? esta tabla productos no debería tener
> un solo
> > precio por producto ?
> > o repetimos los datos para agregar más de un precio a cada
> producto y
> > así poder hacer este ejercicio?
>
>
> Estoy viendo los enunciados, y no me coinciden con tu
> pregunta... tal
> vez los envié mal:
>
> a) Ver productos y su cantidad (cod des pre cant alm)
> b) Ver producos con stock > 5 (cod des cant)
> c) Ver cantidad productos x almacen (alm cant)
> d) Total productos (total)
> e) Precios promedio de los productos (promedio)
> f) Total de productos por almacen (alm cant prod)
> g) Precios promedios por almacen (alm cod des prom)
>
>
> El e) solo proyecta un registro con un campo: el valor
> promedio de los
> productos.
>
> > Resto:
> >
> >
> > a: productos y su cantidad
> >
> > variante 1: muestra total de stock por producto, sin
> discriminar
> > almacen
> >
> >
> > SELECT P.codigo, P.descripcion, P.precio, sum(S.cantidad)
> as Stock
> > FROM (productos as P, stock as S)
> > WHERE P.id=S.id_producto
> > GROUP BY S.id_producto
>
>
> No es lo que pide el enunciado ;-)
>
>
> Ché, Ariel, si ejecutás las querys en tus tablas con
> tus lotes de
> prueba, te dan respuestas coherentes????
>
> Las querys lucen bien.
>
> Si te las dan, las querys están bien.
> Si no te las dan, dame un vuelco de las tablas, la
> query, lo que
> esperás obtener, y vemos qué hacer para que funcione.
>
>
> Saludos!
>
>
>
>
> > variante 2: muestra total de stock por producto y por
> almacen
> >
> >
> > SELECT P.codigo, P.descripcion, P.precio,
> S.cantidad,A.nombre
> > FROM (productos as P)
> > JOIN stock as S on P.id=S.id_producto
> > JOIN almacenes as A on S.id_almacen=A.id
> > GROUP BY S.id_almacen,S.id_producto
> >
> >
> >
> >
> >
> >
> > b: productos con stock mayor a 590
> >
> >
> > SELECT P.codigo, P.descripcion, P.precio, SUM( S.cantidad
> ) as Stock
> > FROM (productos AS P, stock AS S)
> > WHERE P.id = S.id_producto
> > GROUP BY S.id_producto, P.descripcion
> > HAVING SUM( S.cantidad ) > 590
> >
> >
> >
> >
> >
> >
> >
> >
> > c: cantidad de productos por almacen
> >
> >
> > SELECT A.nombre as "Almacen", sum(S.cantidad) as "Stock
> Total"
> > FROM (almacenes as A, stock as S)
> > WHERE A.id=S.id_almacen
> > GROUP BY S.id_almacen
> > ORDER BY A.nombre
> >
> >
> >
> >
> > d: total de productos
> >
> > variante 1: cantidad de articulos con stock mayor a 0
> >
> >
> > SELECT count(distinct id_producto) as "Cantidad de
> articulos con
> > stock"
> > FROM stock
> > WHERE cantidad>0
> >
> > variante 2: cantidad total de articulos en sistema
> >
> >
> > SELECT count(id) as "Cantidad de articulos"
> > FROM productos
> >
> >
> >
> >
> >
> >
> >
> >
> > f: total de productos por almacen
> >
> >
> > si se refiere a total de stock de cada producto por almacen:
> > SELECT A.nombre as "Almacen", P.descripcion,
> sum(S.cantidad) as
> > "Stock"
> > FROM (almacenes as A)
> > JOIN stock as S on A.id=S.id_almacen
> > JOIN productos as P on S.id_producto=P.id
> > GROUP BY S.id_almacen,P.codigo
> >
> >
> > si se refiere a cantidad de artículos por almacen:
> > SELECT A.nombre as "Almacen", COUNT(S.id_producto) as
> "Cant.Arts."
> > FROM (almacenes as A)
> > JOIN stock as S on A.id=S.id_almacen
> > GROUP BY S.id_almacen
> >
> >
> >
> >
> > g: precios promedios por almacen
> > SELECT A.nombre as "Almacen", round(avg(P.precio),2) as
> "Precio
> > Promedio"
> > FROM (almacenes as A)
> > JOIN stock as S on A.id=S.id_almacen
> > JOIN productos as P on P.id=S.id_producto
> > GROUP BY S.id_almacen
> >
> >
> > de vuelta: un solo precio por producto por almacen, es
> decir, que el
> > promedio es teniendo en cuenta todos los productos del
> almacen
> >
> >
> >
> >
> >
> >
>
> > _______________________________________________
> > Php-avanzado mailing list
> > Php-avanzado en pato2.fi.mdp.edu.ar
> >
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
> --
> Leonardo Tadei
> leonardot en pegasusnet.com.ar
> Web: http://leonardo.tadei.com.ar
> Firma pública:
> http://www.pegasusnet.com.ar/LeonardoTadei-public.key
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
>
>
> _______________________________________________
> Php-avanzado mailing list
> Php-avanzado en pato2.fi.mdp.edu.ar
> http://www3.fi.mdp.edu.ar/cgi-bin/mailman/listinfo/php-avanzado
--
Leonardo Tadei
leonardot en pegasusnet.com.ar
Web: http://leonardo.tadei.com.ar
Firma pública: http://www.pegasusnet.com.ar/LeonardoTadei-public.key
Más información sobre la lista de distribución Php-avanzado