SQL - Select y group by

 
Vista:

Select y group by

Publicado por Angel (3 intervenciones) el 24/01/2018 15:02:22
Buenas tardes.

Tengo una tabla alineación que tiene Idpartido, Idequipo, Idfutbolista y Posición.

Tal que
1, 1, 1, Delantero
2, 2, 1, Medio
3, 3, 1, Delantero
4, 3, 1, Delantero
5, 3, 1, Delantero
1, 1, 2, Defensa
2, 2, 2, Defensa

Si quiero saber el futbolista que más partidos jugó es fácil con un Group by, pero ahora quiero saber el número de equipos diferentes en los que han estado los futbolistas ordenado por el que en más equipos ha estado.

En el acaso anterior el resultado que quiero diría:

Idfutbolista, Count(equipos)
1 3
2 2

Muchas gracias.
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: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Select y group by

Publicado por Leonardo Josué (1173 intervenciones) el 24/01/2018 15:55:04
Hola Angel:

La respuesta está en lo que esperas como resultado:

1
Idfutbolista, Count(equipos)

Justo esto es lo que tienes que hacer O_o...

como TIP te puedo decir que si hacer un COUNT SIMPLE de equipos para el jugador con id = 1, te va a regresar un 5, ya que ha jugado en 5 partidos... lo único que tienes que hacer es que te cuente los equipos DISTINTOS en los que ha jugado. (Si esto no te queda claro, pregúntale a SAN GOOGLE cómo hacer un COUNT-DISTINCT.

Haz la prueba y nos comentas, si continuas con problemas, postea lo que intentaste hacer y con gusto te ayudamos a corregir y/o completar lo que haga falta.

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
0
Comentar

Select y group by

Publicado por Angel (3 intervenciones) el 24/01/2018 16:48:48
Efectivamente Leonardo,

Lo que me faltaba era utilizar el COUNT-DISTINCT, y ahora sale perfectamente.

Sería: SELECT Idfutbolista, count(DISTINCT Idequipo) FROM `alineacion` group by Idfutbolista ORDER BY count(DISTINCT `Idequipo`) DESC

Sería posible que al lado dijese los clubes en los que ha jugado.

Por ejemplo:

1 5 Barcelona,Madrid,Deportivo,Atletico,Celta
2 2 Barcelona,Madrid
...

Muchas gracias.
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: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

Select y group by

Publicado por Leonardo Josué (1173 intervenciones) el 24/01/2018 18:03:03
Hola de nuevo ángel:

1
2
3
4
5
6
Sería posible que al lado dijese los clubes en los que ha jugado.
 
Por ejemplo:
 
1 5 Barcelona,Madrid,Deportivo,Atletico,Celta
2 2 Barcelona,Madrid

Si es posible, el cómo hacerlo dependerá de qué BD's estés trabajando. Por ejemplo, con tus datos y trabajando con MySQL, la función de agrupación GROUP_CONCAT hace justamente lo que quieres:

https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql> SELECT
    ->   idfutbolista,
    ->   COUNT(DISTINCT idequipo) total_equipos,
    ->   GROUP_CONCAT(DISTINCT idequipo)  id_equipos
    -> FROM tabla
    -> GROUP BY idfutbolista
    -> ORDER BY 2 DESC;
+--------------+---------------+------------+
| idfutbolista | total_equipos | id_equipos |
+--------------+---------------+------------+
|            1 |             3 | 1,2,3      |
|            2 |             2 | 1,2        |
+--------------+---------------+------------+
2 rows in set (0.00 sec)

Para cambiar los ID's por los nombres de los equipos, sólo tendrías que hacer un JOIN con el catálogo que contengas esas descripciones. Si estás trabajando con un DBMS distinto a MySQL, sólo pregúntale a SAN GOOGLE cómo puedes simular la función GROUP_CONCAT con la BD's en la que estés trabajando.

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
1
Comentar

Select y group by

Publicado por Angel (3 intervenciones) el 24/01/2018 18:48:04
Era justo eso lo que buscaba, ni más ni menos.

Ya está hecho, muchas gracias por la ayuda y buen día.
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