[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