SQL - mostar numero de veces qeu se vota con una puntuacion a un doctor

 
Vista:

mostar numero de veces qeu se vota con una puntuacion a un doctor

Publicado por Sam (13 intervenciones) el 24/07/2018 19:23:49
Hola amigas/os a ver si me pueden ayudar con esto:

tengo una lista de doctores que segun el servicio que den se les puntua del 1 al 4.

Asi que pasado el tiempo un doctor "A" puede tener que le hayan votado

con 1 punto 5 veces,

con 2 puntos 3 veces,

con 3 puntos 7 veces,

y con 4 puntos 2 veces.

la tabla se llama "valoracion" y tiene la siguente estructura:

id | nombre_doctor | puntuacion | fecha | hora

y la consulta que tengo es esta:

1
SELECT nombre_doctor, puntuacion, COUNT(*) AS total FROM valoracion WHERE nombre_doctor='Dr. BERENGUER' GROUP BY pregunta




Y me muestra bien todos las puntuaciones del doctor BERENGUER, pero es que en la tabla hay mas nombres de doctores con sus puntuaciones respectivas.

Osea que necesito que me la consulta sql me muestre una lista con todos los doctores y sus respectivas puntuaciones
ejemplo:
doctor antonio:
6 veces le han votado con un 1
2 veces le han votado con un 2
4 veces le han votado con un 3
7 veces le han votado con un 4

doctor Tomas:
5 veces le han votado con un 1
3 veces le han votado con un 2
6 veces le han votado con un 3
2 veces le han votado con un 4

Y asi sucesivamente con todos los doctores de la tabla

Ya he probado todo lo que sabia hacer, y buscado hasta la saciedad un solucion pero nada.

Gracias de antemano
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

mostar numero de veces qeu se vota con una puntuacion a un doctor

Publicado por leonardo_josue (1173 intervenciones) el 24/07/2018 23:19:50
Hola Sam:

En realidad no estás tan alejado de la respuesa, sin embargo, sólo estás agrupando por el el nombre del Médico, tienes que agrupar también por la puntuación. Checa este ejemplo:

supongamos que tu tabla tienes más o menos estos datos:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> select * from tabla;
+------+---------------+------------+------------+----------+
| id   | nombre_doctor | puntuacion | fecha      | hora     |
+------+---------------+------------+------------+----------+
|    1 | DR. X         |          1 | 2018-07-24 | 16:04:00 |
|    2 | DR. X         |          1 | 2018-07-24 | 16:04:00 |
|    3 | DR. X         |          2 | 2018-07-24 | 16:04:00 |
|    4 | DR. X         |          2 | 2018-07-24 | 16:04:00 |
|    5 | DR. Y         |          1 | 2018-07-24 | 16:04:00 |
|    6 | DR. Y         |          2 | 2018-07-24 | 16:04:00 |
|    7 | DR. Y         |          3 | 2018-07-24 | 16:04:00 |
+------+---------------+------------+------------+----------+
7 rows in set (0.02 sec)


entonces, lo que haces es obtener el nombre del doctor, los puntos y cuantas veces lo han puntuado con esos puntos, AGRUPANDO POR AMBOS CAMPOS:

1
2
3
4
5
6
7
8
9
10
11
12
13
mysql> select nombre_doctor, count(puntuacion) total, puntuacion puntos
    -> from tabla
    -> group by nombre_doctor, puntuacion;
+---------------+-------+--------+
| nombre_doctor | total | puntos |
+---------------+-------+--------+
| DR. X         |     2 |      1 |
| DR. X         |     2 |      2 |
| DR. Y         |     1 |      1 |
| DR. Y         |     1 |      2 |
| DR. Y         |     1 |      3 |
+---------------+-------+--------+
5 rows in set (0.00 sec)

y su quieres presentar los datos con la leyenda que pones, entonces puedes meterlo en una subconsulta:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
mysql> select nombre_doctor, concat(total, ' veces le han votado con ', puntos) texto
    -> from
    -> (
    ->   select nombre_doctor, count(puntuacion) total, puntuacion puntos
    ->   from tabla
    ->   group by nombre_doctor, puntuacion
    -> ) T;
+---------------+-----------------------------+
| nombre_doctor | texto                       |
+---------------+-----------------------------+
| DR. X         | 2 veces le han votado con 1 |
| DR. X         | 2 veces le han votado con 2 |
| DR. Y         | 1 veces le han votado con 1 |
| DR. Y         | 1 veces le han votado con 2 |
| DR. Y         | 1 veces le han votado con 3 |
+---------------+-----------------------------+
5 rows in set (0.00 sec)

El que te "repita" el nombre del doctor, es perfectamente normal. Si quieres presentarlo tal como lo pones en tu ejemplo, tendrás que hacer los ajustes necesarios.

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

mostar numero de veces qeu se vota con una puntuacion a un doctor

Publicado por Sam (13 intervenciones) el 26/07/2018 17:14:22
Leonardo_josue muchas gracias por la gran ayuda tuya. He tardado en responderte por que me ha costado entender todo el codigo que me has puesto pero ya lo he entendido. Y funciona !!!!.

Eres muy bueno. Muchas gracias fenomeno!!! :-))))
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