Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Consulta SQL con o sin Gruop By (https://www.clubdelphi.com/foros/showthread.php?t=55313)

MaMu 14-04-2008 00:34:41

Consulta SQL con o sin Gruop By
 
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


Código SQL [-]
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:

Código SQL [-]
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

Cita:

Empezado por Delphius (Mensaje 279752)
¿Todo eso debe estar en la misma consulta?:confused:
No garantizo que funcione, pero se me ocurre esto:


Código SQL [-]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:

Código SQL [-]
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


La franja horaria es GMT +2. Ahora son las 07:14:00.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi