Objetivo:
Obtener el dorsal y el nombre completo (concatenando nombre y apellidos) de los atletas que
han subido al podio en al menos dos ocasiones. La información se ordena de mayor a menor
según el número de veces que han subido al podio.
Partes de la consulta:
1. Seleccionar las columnas:
a.dorsal: El dorsal del atleta.
concat(concat(a.nombre, " "),a.apellidos): El nombre completo del atleta,
concatenando el nombre, un espacio y los apellidos.
count(*) as num_veces_podio: El número de veces que el atleta ha subido al podio.
2. Unir las tablas:
La consulta une las tablas atleta y competir mediante la condición c.dorsal_atl=a.dorsal. Esto
permite obtener la información del atleta y sus participaciones en las competiciones.
3. Filtrar por posiciones de podio:
La consulta se limita a las filas donde la posición del atleta en la competición (c.posicion) es 1,
2 o 3. Esto asegura que solo se consideren las participaciones en las que el atleta subió al
podio.
4. Agrupar por atleta:
La consulta se agrupa por el dorsal del atleta (a.dorsal) y el nombre (a.nombre) y los apellidos
(a.apellidos). Esto permite contar el número de veces que cada atleta ha subido al podio.
5. Filtrar por número de podios:
La consulta se filtra a los atletas que han subido al podio al menos dos veces (having
count(*)>=2). Esto elimina a los atletas que solo han subido al podio una vez.
6. Ordenar por número de podios:
La consulta se ordena de forma descendente (desc) por el número de veces que el atleta ha
subido al podio (num_veces_podio). Esto muestra primero a los atletas con más podios.
Ejemplo:
Suponiendo que tenemos las siguientes tablas:
Atleta:
Dorsal Nombre Apellidos
1 Juan Pérez
2 María López
3 Pedro García
drive_spreadsheetExportar a Hojas de cálculo
Competir:
Dorsal_atl Posición
1 1
2 2
1 3
3 1
2 2
drive_spreadsheetExportar a Hojas de cálculo
La consulta devolvería el siguiente resultado:
Dorsal Nombre completo Num_veces_podio
1 Juan Pérez 2
2 María López 2
drive_spreadsheetExportar a Hojas de cálculo
Explicación de las funciones:
concat(): Concatena dos o más cadenas de texto.
count(*): Cuenta el número de filas en un grupo.
having: Filtra las filas de un grupo en función de un valor calculado.
order by: Ordena las filas de un conjunto de resultados.
Recursos adicionales:
Función CONCAT en SQL: [se quitó una URL no válida]
Función COUNT en SQL: [se quitó una URL no válida]
Cláusula HAVING en SQL: [se quitó una URL no válida]
Cláusula ORDER BY en SQL: [se quitó una URL no válida]
Nota:
En tu enunciado mencionas que se debe mostrar el dorsal y el nombre y apellidos en el mismo
campo. La consulta ya lo hace al usar la función concat() para concatenar el nombre, un
espacio y los apellidos en la columna nombre_completo.
Espero que esta explicación te haya ayudado a entender la consulta SQL paso a paso.
share
more_vert
solo poniendo count, como sabe mysql que quiero contar las veces que el atleta ha subido al
podium?
volume_up
En la consulta, count(*) se utiliza para contar el número de veces que un atleta ha subido al
podio. Esto funciona porque:
1. La consulta se une a las tablas atleta y competir mediante la
condición c.dorsal_atl=a.dorsal. Esto significa que para cada fila de la tabla competir,
hay una fila correspondiente en la tabla atleta con la información del atleta.
2. La consulta se filtra por las filas donde la posición del atleta en la competición
(c.posicion) es 1, 2 o 3. Esto asegura que solo se consideren las filas donde el atleta ha
subido al podio.
3. La función count(*) cuenta el número de filas en el grupo actual. En este caso, el grupo
se define por el dorsal del atleta (a.dorsal).
En resumen, count(*) cuenta el número de veces que el dorsal del atleta aparece en las filas
donde la posición es 1, 2 o 3. Esto nos da el número de veces que el atleta ha subido al podio.
Ejemplo:
Suponiendo que tenemos la siguiente tabla competir:
Dorsal_atl Posición
1 1
2 2
1 3
3 1
2 2
drive_spreadsheetExportar a Hojas de cálculo
Si ejecutamos la siguiente consulta:
SQL
select a.dorsal, count(*) as num_veces_podio
from atleta a, competir c
where c.dorsal_atl=a.dorsal
and c.posicion in (1,2,3)
group by a.dorsal
Usa el código con precaución.
content_copy
Obtendremos el siguiente resultado:
Dorsal Num_veces_podio
1 2
2 2
3 1
drive_spreadsheetExportar a Hojas de cálculo
En este caso, count(*) ha contado el número de veces que cada dorsal aparece en las filas
donde la posición es 1, 2 o 3.
Recursos adicionales:
Función COUNT en SQL: [se quitó una URL no válida]
share
more_vert
no lo entiendo
edit
Mostrar versiones
1.
2.
3.
4.
5.
volume_up
Explicación más detallada de COUNT(*) en la consulta:
1. Visualización de la relación entre las tablas:
Imagina que las tablas atleta y competir están representadas como dos conjuntos de datos:
Tabla atleta:
Dorsal Nombre Apellidos
1 Juan Pérez
2 María López
3 Pedro García
drive_spreadsheetExportar a Hojas de cálculo
Tabla competir:
Dorsal_atl Posición
1 1
2 2
1 3
3 1
2 2
drive_spreadsheetExportar a Hojas de cálculo
2. Filtrado por posiciones de podio:
Al usar la condición c.posicion in (1,2,3), seleccionamos solo las filas de la tabla competir
donde la posición del atleta es 1 (primer lugar), 2 (segundo lugar) o 3 (tercer lugar).
3. Agrupación por dorsal del atleta:
Luego, la consulta se agrupa por el dorsal del atleta en la tabla atleta. Esto crea grupos
separados para cada atleta, con todas sus participaciones en las competiciones.
4. Conteo de filas en cada grupo:
count(*) se utiliza dentro de cada grupo para contar el número de filas. En este caso, el
número de filas en cada grupo representa el número de veces que el atleta ha subido al podio.
5. Visualización del resultado:
La consulta finalmente muestra el dorsal del atleta y el número de veces que ha subido al
podio (num_veces_podio) para cada grupo.
Ejemplo:
Para el atleta con el dorsal 1, la consulta seleccionará las filas:
Dorsal_atl Posición
1 1
1 3
drive_spreadsheetExportar a Hojas de cálculo
Luego, count(*) contará el número de filas en este grupo, que es 2. Esto significa que el atleta
con el dorsal 1 ha subido al podio 2 veces.