SoloCodigo

Bases de Datos => SQL Server => Mensaje iniciado por: AdrianHdez en Domingo 3 de Junio de 2007, 07:31

Título: Duda Con Sum Y Min
Publicado por: AdrianHdez en Domingo 3 de Junio de 2007, 07:31
saludos

quiero saber por que no puedo obtener el maximo de esta consulta colocando despues del GROUP BY: having max(sum(Leche.cantidad)). Me da este error: Cannot perform an aggregate function on an expression containing an aggregate or a subquery.


select Granja.NoGranja, sum(Leche.cantidad) as Produccion_Leche  from Granja inner join
   Animal on Granja.NoGranja = Animal.NoGranja inner join Produccion on
    Produccion.idProd = Animal.IdProd inner join [Leche] on [Leche].idProd = Produccion.idProd
GROUP BY Granja.NoGranja
Título: Re: Duda Con Sum Y Min
Publicado por: Mollense en Domingo 3 de Junio de 2007, 09:08
having es una condición como el where pero que se aplica a los a los registros resultantes de algún GROUP BY y max no es ninguna condición.

¿Se entiende?
Título: Re: Duda Con Sum Y Min
Publicado por: F_Tanori en Domingo 3 de Junio de 2007, 11:31
Cita de: "AdrianHdez"
saludos

quiero saber por que no puedo obtener el maximo de esta consulta colocando despues del GROUP BY: having max(sum(Leche.cantidad)). Me da este error: Cannot perform an aggregate function on an expression containing an aggregate or a subquery.


select Granja.NoGranja, sum(Leche.cantidad) as Produccion_Leche  from Granja inner join
   Animal on Granja.NoGranja = Animal.NoGranja inner join Produccion on
  Produccion.idProd = Animal.IdProd inner join [Leche] on [Leche].idProd = Produccion.idProd
GROUP BY Granja.NoGranja
Esa es tu sentencia completa?

en que parte usas? Max

asi?

<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]select[/color] Granja.NoGranja, sum(Leche.cantidad) as Produccion_Leche  from Granja inner join
   Animal on Granja.NoGranja = Animal.NoGranja inner join Produccion on
    Produccion.idProd = Animal.IdProd inner join [Leche] on [Leche].idProd = Produccion.idProd GROUP BY Granja.NoGranja having max(sum(Leche.cantidad)) <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

pues creo que eso no esta permitido :P

mira este seria un ejemplo con sub-consultas tendrias que adaptarlo con las tablas apropiadas, con esto obtendrias el maximo de produccion de leche por granja (quedando pendientes las demas tablas):

* <!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]select[/color] Granja.NoGranja,max(([color=blue;font-weight]SELECT[/color] sum(Leche.Cantidad)  FROM Leche where Granja.NoGranja=Granja.NoGranja GROUP BY Leche.NoGranja)) Produccion_Leche from Granja order by Produccion_Leche desc <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->

* Este codigo fue probado en MySQL y es posible que algunas haya que hacer algunas modificaciones para adaptarlo a SQL Server  <_<

Otro detalles si lo que haces es un Having (deduzco  :rolleyes:  que solo te interesa la granja con mayor produccion de leche, el cual seria un solo registro)

Puedes hacer lo siguiente:

<!--sql--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>SQL </td></tr><tr><td id='CODE'><!--sql1-->[color=blue;font-weight]SELECT[/color] Top 1 sum(Leche.Cantidad) Produccion_Leche desc FROM Leche,Granja where Granja.NoGranja=Granja.NoGranja GROUP BY Leche.NoGranja order by Produccion_Leche desc <!--sql2--></td></tr></table><div class='postcolor'><!--sql3-->


Ordenarlos de mayor a menor y tomar el primer registro que por logica debe ser el mayor :P

Espero haber ayudado




Cita de: "Angel_K_ido"
having es una condición como el where pero que se aplica a los a los registros resultantes de algún GROUP BY y max no es ninguna condición.

¿Se entiende?
No :P

Saludos
Título: Re: Duda Con Sum Y Min
Publicado por: Mollense en Domingo 3 de Junio de 2007, 14:58
Cita de: "F_Tanori"
Cita de: "Angel_K_ido"
having es una condición como el where pero que se aplica a los a los registros resultantes de algún GROUP BY y max no es ninguna condición.

¿Se entiende?
No :P
 :scream:  Es que anoche yo estaba ebrio :beer: ... en fin...

 :hola: