MySQL - Contar las veces que se repite un campo con una funcion

 
Vista:
sin imagen de perfil
Val: 95
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Contar las veces que se repite un campo con una funcion

Publicado por yaney (31 intervenciones) el 01/08/2018 12:29:24
Hola a todos
Mi consulta es en una base de datos mysql en la que tengo una tabla con un campo fecha de nacimiento al cual le estoy aplicando una funcion para obtener la edad de la persona.

SELECT fechanacim,TIMESTAMPDIFF(YEAR,fechanacim,CURDATE()) as edad from cliente

y esto me lista las fechas de nacimientos con la edad

Quiero listar las veces que se repite la edad para saber cuántas personas de cada edad tengo en la base de datos.

Cómo podría contar el campo "edad" resultado de la función?

Gracias de antemano
Saludos
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Contar las veces que se repite un campo con una funcion

Publicado por Leonardo Josué (414 intervenciones) el 01/08/2018 16:16:32
Hola yaney:

El campo EDAD es un campo calculado, por lo tanto SÓLO EXISTE DESPUÉS DE LA EJECUCIÓN DE LA CONSULTA, por lo tanto no puedes utilizarlo directamente en el GROUP BY. Para hacer lo que quieres, tienes de dos sopas:


1. Utilizas el CALCULO en el GROUP BY (ojo, no es lo mismo utilizar el cálculo a utilizar el campo calculado):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
mysql> SELECT fechanacim,TIMESTAMPDIFF(YEAR,fechanacim,CURDATE()) as edad FROM tabla;
+------------+------+
| fechanacim | edad |
+------------+------+
| 1991-07-15 |   27 |
| 2002-08-01 |   16 |
| 1980-08-14 |   37 |
| 1991-05-30 |   27 |
| 2002-08-01 |   16 |
| 1980-08-31 |   37 |
| 1995-01-01 |   23 |
| 2005-08-01 |   13 |
| 1980-08-14 |   37 |
+------------+------+
9 rows in set (0.00 sec)
 
mysql> SELECT TIMESTAMPDIFF(YEAR,fechanacim,CURDATE()) as edad, COUNT(1) total
    -> FROM tabla
    -> GROUP BY TIMESTAMPDIFF(YEAR,fechanacim,CURDATE());
+------+-------+
| edad | total |
+------+-------+
|   13 |     1 |
|   16 |     2 |
|   23 |     1 |
|   27 |     2 |
|   37 |     3 |
+------+-------+
5 rows in set (0.00 sec)

2. Haces una subconsulta, al hacer esto la subconsulta se ejecuta primero y por lo tanto el campo EDAD ya existe al momento de ejecutar la consulta principal:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
mysql> SELECT edad, count(1) from
    -> ( SELECT fechanacim,TIMESTAMPDIFF(YEAR,fechanacim,CURDATE()) as edad
    ->   FROM tabla
    -> ) T
    -> GROUP BY edad;
+------+----------+
| edad | count(1) |
+------+----------+
|   13 |        1 |
|   16 |        2 |
|   23 |        1 |
|   27 |        2 |
|   37 |        3 |
+------+----------+
5 rows in set (0.00 sec)

Ambas consultas te regresan el mismo resultado

Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 95
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Contar las veces que se repite un campo con una funcion

Publicado por yaney (31 intervenciones) el 01/08/2018 16:36:00
Gracias Leonardo, como siempre rápido en tu respuesta. Me puse a hacer pruebas y lo había resuelto con esta consulta

SELECT TIMESTAMPDIFF(YEAR,fechanacim,CURDATE()) as edad, COUNT(*) as cantedad from cliente group by edad

Lo único que veo que cuando obtengo las edades de la consulta restando a la fecha actual la fecha de nacimiento, obtengo personas de dos años distintos con la misma edad y quisiera que todos los nacidos en el 75 (ejemplo) los dé como que tienen 43 años y así suscesivamente, pues esta consulta calcula el tiempo trascurrido de la fecha de nacimiento a la fecha de hoy, como podría hacer para que calcule solo año de la fecha de nacimiento y año actual y no la fecha completa?

Gracias
Yaney
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
sin imagen de perfil
Val: 953
Oro
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Contar las veces que se repite un campo con una funcion

Publicado por Leonardo Josué (414 intervenciones) el 01/08/2018 16:50:49
Hola de nuevo yaney:

1
como podría hacer para que calcule solo año de la fecha de nacimiento y año actual y no la fecha completa?

Puedes utilizar la función YEAR para extraer sólo el AÑO y cambias el cálculo a una vil resta:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> SELECT
    ->   fechanacim,
    ->   TIMESTAMPDIFF(YEAR,fechanacim,CURDATE()) as edad_1,
    ->   YEAR(curdate()) - YEAR(fechanacim) edad_2
    -> FROM tabla;
+------------+--------+--------+
| fechanacim | edad_1 | edad_2 |
+------------+--------+--------+
| 1975-07-31 |     43 |     43 |
| 1975-08-01 |     43 |     43 |
| 1975-08-02 |     42 |     43 |
+------------+--------+--------+
3 rows in set (0.00 sec)

la edad_1 se calcula tal como lo vienes haciendo... la edad_2 se calcula sólo con el año, así, para el último de los registros aunque su cumpleaños sea el día de mañana, ya considera que tiene 43 años.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil
Val: 95
Ha mantenido su posición en MySQL (en relación al último mes)
Gráfica de MySQL

Contar las veces que se repite un campo con una funcion

Publicado por yaney (31 intervenciones) el 02/08/2018 10:25:05
Gracias, una vez más, Leonardo, por el nuevo conocimiento que me aportas.
Saludos
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