PDA

Ver la Versión Completa : Consulta SQL con o sin Gruop By


MaMu
14-04-2008, 00:34:41
Yo tengo 2 tablas, siendo estas:

TABLA1
=====
DNI
NOMBRE
CATEGORIA (niño,joven,adulto,anciano)

TABLA2
=====
DNI
PESO

Y lo que necesito hacer es lo siguiente:
Obtener siempre los nombres de:
-La persona de Mayor peso, segun la categoria
-La persona de Menor peso, segun la categoria
-El peso total de una categoria cualquiera.

Yo ensayé haciendo lo siguiente


select A.nombre,A.DNI,(select B.DNI,MAX(B.peso) from tabla2 B where B.DNI=A.DNI) as MaxPeso,
(select C.DNI,MIN(C.peso) from tabla2 C where C.DNI=A.DNI) as MinPeso,
(select SUM(D.peso) from tabla2 D) as TotalPeso
from tabla1 A where categoria="joven"


Pero no hay caso, en que me equivoco? Group By?

Saludos

Delphius
14-04-2008, 02:22:08
¿Todo eso debe estar en la misma consulta?:confused:
No garantizo que funcione, pero se me ocurre esto:

SELECT Tabla1.DNI, Tabla1.Nombre, Tabla2.Peso,
FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.DNI = Tabla2.DNI
WHERE (((Tabla2.Peso)=Max("Peso")) AND ((Tabla2.Peso)=Min("Peso")) AND ((Tabla2.Peso)=Sum("Peso")))
ORDER BY Tabla1.Categoria

Saludos,

MaMu
14-04-2008, 02:44:27
¿Todo eso debe estar en la misma consulta?:confused:
No garantizo que funcione, pero se me ocurre esto:


Código SQL [-] (http://www.clubdelphi.com/foros/#)SELECT Tabla1.DNI, Tabla1.Nombre, Tabla2.Peso,
FROM Tabla1 INNER JOIN Tabla2 ON Tabla1.DNI = Tabla2.DNI
WHERE (((Tabla2.Peso)=Max("Peso")) AND ((Tabla2.Peso)=Min("Peso")) AND ((Tabla2.Peso)=Sum("Peso")))
ORDER BY Tabla1.Categoria




Saludos,

No, tampoco me funciona de esta forma
"SQL Error : invalid use of group function"

PD: uso mySQL 4.1

Delphius
14-04-2008, 02:44:49
Aunque también he estado pensando en algo similar a esto:

select Tabla1.DNI, Tabla1.Nombre, Maximo, Minimo, Suma, Tabla1.Categoria,
from tabla1 where Tabla1.DNI IN
(select Tabla2.DNI, Max(Peso) as Maximo, Min(Peso) as Minimo, Sum(Peso) as Suma
from Tabla2)
Order by Tabla1.Categoria

Saludos,

MaMu
14-04-2008, 03:00:30
No, tambien me sale el mismo error. :(

Capaz me combiene hacer consultas separadas. Osea, yo quiero que me devuelva 1 solo registro, por ejemplo el nombre de mayor peso.

Saludos

Delphius
14-04-2008, 03:13:56
Eso estaba por recomendarte, me parecen un tanto "rebuscados" esos requisitos.
Creo que es mejor devolver en forma separada. O sino prueba con una Unión.

No uso MySQL, en mi PC sólo dispongo de Access y Firebird.

Saludos,

MaMu
14-04-2008, 04:45:50
SOLUCIONADO

Opté por hacer las consultas por separado, ya que no pude resolver los errores por ambieguedad en los campos relacionados.

Saludos