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

Cuando usar group by

Estas en el tema de Cuando usar group by en el foro de SQL Server en Foros del Web. Hola! Estoy haciendo unos ejercicios donde en uno me piden obtener nombre y precio de los artículos más caros incluyendo el nombre del proveedor y ...
  #1 (permalink)  
Antiguo 18/06/2012, 14:36
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Cuando usar group by

Hola!

Estoy haciendo unos ejercicios donde en uno me piden obtener nombre y precio de los artículos más caros incluyendo el nombre del proveedor y en otro, el nombre de los fabricantes cuyo articulos, el precio medio es igual a 150$. Las tablas son estas:

Fabricantes: Codigo, Nombre
Articulos: Codigo, Nombre, Precio y Fabricante

Los campos claves son Codigo (fabricantes) y fabricante (articulos)

Las resoluciones son las siguientes: para el del precio medio...

Código:
Select
	Avg(Precio), Fabricantes.Nombre
From Articulos Inner Join Fabricantes
On Articulos.Fabricante = Fabricantes.Codigo
Group by Fabricantes.Nombre
Having Avg(Precio) = 150
Y Para el otro de los precios maximos:

Código:
SELECT     A.Nombre, A.Precio, B.Nombre 
FROM         ARTICULOS A INNER JOIN
                      FABRICANTES B ON A.Fabricante = B.Codigo
And A.Precio = (Select Max(A.Precio) From Articulos A Where A.Fabricante = B.Codigo)
Mi pregunta ¿por qué en uno se usa una subconsulta de condición y en el otro se agrupa con el group by? ¿por qué no se podría agrupar en los dos casos por igual?

Saludos!
  #2 (permalink)  
Antiguo 18/06/2012, 14:46
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cuando usar group by

Porque en uno estas usando una funcion de agregacion(AVG) y en el otro quieres saber el valor maximo si usaras un group by con un valor maximo no te daria realmente el valor maximo.

Por ejemplo

nombre precio fabricante
tabla 100 yo
mesa 200 yo
casa 300 yo
silla 400 el

en este caso si sacaras el precio maximo y su fabricante seria la silla de 400 pero si haces un group by te mostraria 2 resultados, la silla y la casa uno para el fabricante yo y otro para el fabricante el, usando las funciones de agregacion es necesario usar un group by.

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 19/06/2012, 07:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 175
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Cuando usar group by

Cita:
Iniciado por Libras Ver Mensaje
Porque en uno estas usando una funcion de agregacion(AVG) y en el otro quieres saber el valor maximo si usaras un group by con un valor maximo no te daria realmente el valor maximo.

Por ejemplo

nombre precio fabricante
tabla 100 yo
mesa 200 yo
casa 300 yo
silla 400 el

en este caso si sacaras el precio maximo y su fabricante seria la silla de 400 pero si haces un group by te mostraria 2 resultados, la silla y la casa uno para el fabricante yo y otro para el fabricante el, usando las funciones de agregacion es necesario usar un group by.

saludos!

Muchas gracias.

Una pregunta ¿Hay algún tipo de consigna especial dónde uno ya sabe cuando tiene que usar el group by o difiere de lo que se pida en particular?
  #4 (permalink)  
Antiguo 19/06/2012, 07:56
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Cuando usar group by

Asi como una regla para decir va group by despues de ";" NO, todo depende de como quieres tus resultados y como estan tus datos

saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: group, select, tabla, usar, campos
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 03:34.