Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: m@o_614 en 26 Mayo 2013, 03:51 am



Título: ejercicios sql
Publicado por: m@o_614 en 26 Mayo 2013, 03:51 am
Saludos

Tengo el siguiente una base de datos compuesta por dos tablas, una que se llama fabricante(codigo,nombre) y otra que se llama articulos(codigo,nombre,precio,fabricante)y tengo un problema que dice:

Obtener los nombres de los fabricantes que ofrezcan productos cuyo precio medio sea mayor o igual a 170 y me pone la solucion que es esta:

SELECT F.Nombre, AVG(Precio)
FROM ARTICULOS A, Fabricantes F
WHERE A.Fabricante = F.Codigo
GROUP BY F.Nombre
HAVING AVG (Precio)>=170

pero no le entiendo a partir de la linea 3, si alguien me pudiera explicar le agradeceria mucho






Título: Re: ejercicios sql
Publicado por: #!drvy en 26 Mayo 2013, 04:43 am
SELECIONAR F.Nombre, Promedio(Precio)
DE ARTICULOS como A, Fabricantes como F
DONDE A.Fabricante es_el_mismo_que F.Codigo
AGRUPAR POR F.Nombre
TENIENDO Promedio(Pecio) mayor_o_igual_a 170.

Saludos



Título: Re: ejercicios sql
Publicado por: m@o_614 en 27 Mayo 2013, 02:12 am
Muchas gracias ya estoy comprendiendo mejor, una ultima duda, cuando tengo dos tablas una se llama Piezas y tiene los campos codigo que es Pk(llave primaria) y nombre y tengo otra tabla que dice suministra que tien los campos(precio y CodigoPieza que es FK(llave foranea)). Si tengo un problema que me dice

Obtener el precio medio al que se nos suministran las piezas la respuesta seria algo asi????

SELECT CodigoPieza,AVG(Precio)
FROM Suministra
WHERE y aqui es donde me trabo


Título: Re: ejercicios sql
Publicado por: Saberuneko en 3 Junio 2013, 20:11 pm
Bueno, primero... Estás sacando un valor medio, por lo que en Código de pieza no lo necesitas. Estás sacando la media de todas sin más.

Por lo tanto te quedaría algo tal que:

SELECT AVG(Precio)
FROM Suministra

La condición where la puedes añadir o no, dependiendo de si la necesitas o no.

Aquí le estarías poniendo eso.

SELECCIONAR Media de Precios
DE Suministra

A menos que cada pieza tenga varias entradas, en tal caso sería:
(Recuerda que una PK no puede estar repetida, pero una FK sí puede)

SELECT CodigoPieza, AVG(Precio)
FROM Suministra
GROUP BY CodigoPieza;

Lo que te haría sería hacer medias agrupadas por piezas (pero no la media total)...

SELECCIONAR Codigo_Pieza, Media_de_Precios
DE Suministra
AGRUPAR POR Codigo_Pieza;