SQL - Cómo seleccionar el registro con la mayor edad o la menor edad de cada país

 
Vista:
sin imagen de perfil

Cómo seleccionar el registro con la mayor edad o la menor edad de cada país

Publicado por Alejandro (2 intervenciones) el 15/07/2021 19:22:45
¿Cómo seleccionar el registro con la mayor o menor edad de cada país?

clientes_edad

Muchas gracias

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Cómo seleccionar el registro con la mayor edad o la menor edad de cada país

Publicado por Isaias (1711 intervenciones) el 16/07/2021 05:12:09
Hola, dependerá del motor de base de datos que estes ocupando y que en este existan las funciones MAX y MIN, para SQL Server seria:

1
2
3
SELECT PAIS,  MAX(EDAD) AS [Mayor edad], MIN(EDAD AS [Menor edad]
FROM TUTABLA
GROUP BY PAIS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Cómo seleccionar el registro con la mayor edad o la menor edad de cada país

Publicado por Alejandro (2 intervenciones) el 16/07/2021 17:47:39
Muchas gracias

¿Y si quisiera seleccionar el promedio de edad, la persona más mayor y más joven de cada país?

Lo he conseguido es con esta consulta superlarga:

1
2
3
4
5
6
7
8
9
10
(SELECT ec1.PAÍS AS 'PAÍS', ROUND(AVG(ec1.EDAD),1) AS 'PROMEDIO EDAD', ec1.NOMBRE AS 'CLIENTE MÁS JOVEN', ec1.EDAD AS 'EDAD', ec2.NOMBRE AS 'CLIENTE MÁS MAYOR', ec2.EDAD AS 'EDAD' FROM edad_clientes ec1 INNER JOIN edad_clientes ec2 ON(ec2.EDAD = (SELECT MAX(ec3.EDAD) FROM edad_clientes ec3 WHERE ec3.PAÍS = 'ESP') ) WHERE ec1.PAÍS = 'ESP' LIMIT 1) UNION
(SELECT ec1.PAÍS AS 'PAÍS', ROUND(AVG(ec1.EDAD),1) AS 'PROMEDIO EDAD', ec1.NOMBRE AS 'CLIENTE MÁS JOVEN', ec1.EDAD AS 'EDAD', ec2.NOMBRE AS 'CLIENTE MÁS MAYOR', ec2.EDAD AS 'EDAD' FROM edad_clientes ec1 INNER JOIN edad_clientes ec2 ON(ec2.EDAD = (SELECT MAX(ec3.EDAD) FROM edad_clientes ec3 WHERE ec3.PAÍS = 'FRA') ) WHERE ec1.PAÍS = 'FRA' LIMIT 1)
UNION
(SELECT ec1.PAÍS AS 'PAÍS', ROUND(AVG(ec1.EDAD),1) AS 'PROMEDIO EDAD', ec1.NOMBRE AS 'CLIENTE MÁS JOVEN', ec1.EDAD AS 'EDAD', ec2.NOMBRE AS 'CLIENTE MÁS MAYOR', ec2.EDAD AS 'EDAD' FROM edad_clientes ec1 INNER JOIN edad_clientes ec2 ON(ec2.EDAD = (SELECT MAX(ec3.EDAD) FROM edad_clientes ec3 WHERE ec3.PAÍS = 'GER') ) WHERE ec1.PAÍS = 'GER' LIMIT 1)
UNION
(SELECT ec1.PAÍS AS 'PAÍS', ROUND(AVG(ec1.EDAD),1) AS 'PROMEDIO EDAD', ec1.NOMBRE AS 'CLIENTE MÁS JOVEN', ec1.EDAD AS 'EDAD', ec2.NOMBRE AS 'CLIENTE MÁS MAYOR', ec2.EDAD AS 'EDAD' FROM edad_clientes ec1 INNER JOIN edad_clientes ec2 ON(ec2.EDAD = (SELECT MAX(ec3.EDAD) FROM edad_clientes ec3 WHERE ec3.PAÍS = 'ITA') ) WHERE ec1.PAÍS = 'ITA' LIMIT 1)
UNION
(SELECT ec1.PAÍS AS 'PAÍS', ROUND(AVG(ec1.EDAD),1) AS 'PROMEDIO EDAD', ec1.NOMBRE AS 'CLIENTE MÁS JOVEN', ec1.EDAD AS 'EDAD', ec2.NOMBRE AS 'CLIENTE MÁS MAYOR', ec2.EDAD AS 'EDAD' FROM edad_clientes ec1 INNER JOIN edad_clientes ec2 ON(ec2.EDAD = (SELECT MAX(ec3.EDAD) FROM edad_clientes ec3 WHERE ec3.PAÍS = 'USA') ) WHERE ec1.PAÍS = 'USA' LIMIT 1)
UNION
(SELECT ec1.PAÍS AS 'PAÍS', ROUND(AVG(ec1.EDAD),1) AS 'PROMEDIO EDAD', ec1.NOMBRE AS 'CLIENTE MÁS JOVEN', ec1.EDAD AS 'EDAD', ec2.NOMBRE AS 'CLIENTE MÁS MAYOR', ec2.EDAD AS 'EDAD' FROM edad_clientes ec1 INNER JOIN edad_clientes ec2 ON(ec2.EDAD = (SELECT MAX(ec3.EDAD) FROM edad_clientes ec3 WHERE ec3.PAÍS = 'VEN') ) WHERE ec1.PAÍS = 'VEN' LIMIT 1)



clientes_edad2

¿Alguna manera de lograr el mismo resultado pero más simple?

Muchas gracias

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Cómo seleccionar el registro con la mayor edad o la menor edad de cada país

Publicado por Isaias (1711 intervenciones) el 04/08/2021 18:00:47
https://www.mssqltips.com/sqlservertip/4424/max-min-and-avg-sql-server-functions/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar