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

Promedio de edad

Estas en el tema de Promedio de edad en el foro de Mysql en Foros del Web. Hola a todos... Tengo el campo date de "nacimiento" en la BD "usuarios" y sé como extraer la edad con esta consulta: Código PHP: <?php ...
  #1 (permalink)  
Antiguo 19/01/2010, 09:03
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Promedio de edad

Hola a todos...

Tengo el campo date de "nacimiento" en la BD "usuarios" y sé como extraer la edad con esta consulta:

Código PHP:
<?php
$query 
"SELECT nacimiento, CURRENT_DATE, (YEAR(CURRENT_DATE) - YEAR(nacimiento)) - (RIGHT(CURRENT_DATE,5) < RIGHT(nacimiento,5)) AS edad FROM usuarios WHERE nacimiento > '0'";
$result =  mysql_query($query);
$row mysql_fetch_assoc$result );
$edad $row[edad];
mysql_free_result($result);
?>
Pro lo que necesito es sacar el promedio de edad de entre todos los usuarios. Eso se puede en MySQL?

Si es así, por favor alguien me puede orientar a que parte del manual dirigirme o sugerirme algún ejemplo o ayuda, por que no he podido o no he sabido encontrar info.

Última edición por paulkees; 19/01/2010 a las 09:31
  #2 (permalink)  
Antiguo 19/01/2010, 09:20
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Promedio de edad

ya haz probado la función avg?
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 19/01/2010, 09:33
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Promedio de edad

hola huesos52...

Lo que leo de AVG es que toma números enteros y no de fechas. No obstante, he intentado de esta forma pero no funciona o lo estoy haciendo mal:

Código PHP:
<?php
$query 
"SELECT nacimiento, CURRENT_DATE, (YEAR(CURRENT_DATE) - YEAR(nacimiento)) - (RIGHT(CURRENT_DATE,5) < RIGHT(nacimiento,5)) AS edad, AVG(edad) AS edadpromedio FROM users WHERE nacimiento > '0' GROUP BY edad";
$result =  mysql_query($query);
$row mysql_fetch_assoc$result );
$edadpromedio $row[edadpromedio];
mysql_free_result($result);
?>
  #4 (permalink)  
Antiguo 19/01/2010, 09:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Promedio de edad

Si lo que quieres obtener es el promedio de edades, para eso no necesitas promediar las fechas. Debes usar AVG() con las edades...
Código MySQL:
Ver original
  1.     nacimiento,
  2.     AVG(TIMESTAMDIFF(YEAR, nacimiento, CURDATE())) Edad_Promedio
  3. FROM usuarios
  4. HAVING TIMESTAMDIFF(YEAR, nacimiento, CURDATE()) > 0;
Algo así, suponiendo que "nacimiento" sea un DATE o DATETIME.

P.D.: Trata de buscar las funciones más eficientes, que están todas en el manual de referencia. No te compliques haciendo operaciones aritméticas innecesarias.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 19/01/2010 a las 09:46 Razón: Error ortográfico
  #5 (permalink)  
Antiguo 19/01/2010, 10:15
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Promedio de edad

Hola gnzsoloyo...

Gracias por tu ayuda... el campo "nacimiento" es un campo tipo DATE "0000-00-00" y lo he probado como se muestra pero no funciona:

Código PHP:
<?php
$query 
"SELECT nacimiento, AVG(TIMESTAMDIFF(YEAR, nacimiento, CURDATE())) Edad_Promedio FROM usuarios HAVING TIMESTAMDIFF(YEAR, nacimiento, CURDATE()) > '0' ";
$result =  mysql_query($query);
$row mysql_fetch_assoc$result );
$edadpromedio $row[Edad_Promedio];
mysql_free_result($result);
?>
El manual lo leo, pero me cuesta muchas veces implementar las funciones, los ejemplos me ayudan mucho y sobre todo me orientan... seguiré leyendo pero por ahora no doy en la tecla!
  #6 (permalink)  
Antiguo 19/01/2010, 10:22
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Promedio de edad

Cuando algo no te funcione, captura el error (mensaje y número), porque de esa forma es muchísimo más fácil saber qué es lo que hay que hacer.
la sentencia te está devolviendo un error de sintaxis (cosas del apuro), porque está mal escrita la función TIMESTAMPDIFF().
La cosa sería:
Código MySQL:
Ver original
  1.     nacimiento,
  2.     AVG(TIMESTAMPDIFF(YEAR, nacimiento, CURDATE())) Edad_Promedio
  3. FROM usuarios
  4. HAVING TIMESTAMPDIFF(YEAR, nacimiento, CURDATE()) > 0;

o bien
Código MySQL:
Ver original
  1.     nacimiento,
  2.     AVG(TIMESTAMDIFF(YEAR, nacimiento, CURDATE())) Edad_Promedio
  3. FROM usuarios
  4. WHERE TIMESTAMDIFF(YEAR, nacimiento, CURDATE()) > 0;
Deberían funcionar igual.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 19/01/2010, 10:34
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Promedio de edad

Siiii gnzsoloyo era eso, que torpeza la mia!!!

Me da como resultado de promedio un valor como éste: 25.3333 donde me parece raro el ".3333" eso se puede eliminar o es propio de la función?
  #8 (permalink)  
Antiguo 19/01/2010, 11:00
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Promedio de edad

Ya encontré la solución para sacarle el ".3333" que son los decimales -con ROUND(AVG() ,0) ó solamente con ROUND(AVG())- de ésta forma:

Código PHP:
<?php
$query 
"SELECT nacimiento, ROUND(AVG(TIMESTAMDIFF(YEAR, nacimiento, CURDATE())),0) Edad_Promedio FROM usuarios HAVING TIMESTAMDIFF(YEAR, nacimiento, CURDATE()) > '0' ";
$result =  mysql_query($query);
$row mysql_fetch_assoc$result );
$edadpromedio $row[Edad_Promedio];
mysql_free_result($result);
?>

Última edición por paulkees; 19/01/2010 a las 11:24
  #9 (permalink)  
Antiguo 19/01/2010, 11:45
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Promedio de edad

Muchísimas gracias gnzsoloyo y huesos52... me han enseñado mucho con los ejemplos y les estoy muy agradecido!!!
  #10 (permalink)  
Antiguo 13/09/2010, 18:16
Avatar de p414  
Fecha de Ingreso: agosto-2009
Ubicación: casi casi casi... a un lado de la cuna...
Mensajes: 575
Antigüedad: 15 años, 2 meses
Puntos: 44
Respuesta: Promedio de edad

y gracias a ti por preguntar :D porque esto me sirve tambien a mi :D

y a los dos parte mia gracias xD

Etiquetas: edad, promedio
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 22:56.