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

Seleccionar el maximo de varias columnas

Estas en el tema de Seleccionar el maximo de varias columnas en el foro de Mysql en Foros del Web. Tengo la siguente tabla Tabla: notas ID, Nombre, matematica, lengua, naturales, sociales 1 juan 9 7 10 7 2 pepito 10 6 9 4 3 ...
  #1 (permalink)  
Antiguo 23/11/2014, 20:15
 
Fecha de Ingreso: noviembre-2005
Mensajes: 144
Antigüedad: 18 años, 5 meses
Puntos: 2
Seleccionar el maximo de varias columnas

Tengo la siguente tabla

Tabla: notas

ID, Nombre, matematica, lengua, naturales, sociales

1 juan 9 7 10 7
2 pepito 10 6 9 4
3 jaimito 8 10 8 3

Muestro la tabla tal cual se ve en en el MYSQL pero ademas me gustaria ponerle u fondo verde al que obtenga la maxima nota en cada materia.

Por ejemplo en matematica a pepito le corresponderia un fondo verde y a jaimito en lengua...etc

Como debería hacer la selección para el Maximo?

por ahora tengo esto

Código MySQL:
Ver original
  1. SELECT * FROM grupal WHERE grado='$grado' ORDER BY id ASC LIMIT 0, 5", $link);
[/HIGHLIGHT]

Gracias.

Última edición por gnzsoloyo; 23/11/2014 a las 22:07
  #2 (permalink)  
Antiguo 23/11/2014, 22:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Seleccionar el maximo de varias columnas

Esto es MySQL, no SQL Server.

Movido a foro correcto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 24/11/2014, 10:54
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Seleccionar el maximo de varias columnas

Hola juansemaster:

Tu problema no es de MySQL, sino más bien de la forma en que "pintas" o presentas la información. Eso de "pintar de verde" supongo que lo haces en una página WEB, o en algún tipo de informe, eso no tiene nada que ver con MySQL. En todo caso, con MySQL puedes obtener qué nota es la mayor, para que al momento de pintar la columna respectiva, si la calificación es igual a la calificación mayor, entonces cambiar el formato.

Hay varias formas para obtener qué nota es la mayor, la forma "estandar" sería comparar las cuatro columnas con un CASE-WHEN de manera exhaustiva, es decir, hacer algo como esto:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM notas;
  2. +------+----------+-------------+--------+-----------+----------+
  3. | ID   | Nombre   | matematicas | lengua | naturales | sociales |
  4. +------+----------+-------------+--------+-----------+----------+
  5. |    1 | juan     |           9 |      7 |        10 |        7 |
  6. |    2 | pepito   |          10 |      6 |         9 |        4 |
  7. |    3 | jaimito  |           8 |     10 |         8 |        3 |
  8. |    4 | leonardo |           8 |      9 |         9 |        8 |
  9. +------+----------+-------------+--------+-----------+----------+
  10. 4 rows in set (0.00 sec)
  11.  
  12.  
  13. mysql> SELECT
  14.     ->    id, nombre, matematicas, lengua, naturales, sociales,
  15.     ->    CASE WHEN (matematicas >= lengua AND matematicas >= naturales AND matematicas >= sociales) THEN matematicas
  16.     ->         WHEN (lengua >= matematicas AND lengua >= naturales AND lengua >= sociales) THEN lengua
  17.     ->         WHEN (naturales >= matematicas AND naturales >= lengua AND naturales >= sociales) THEN naturales
  18.     ->         WHEN (sociales >= matematicas AND sociales >= lengua AND sociales >= naturales) THEN sociales
  19.     ->    END nota_mayor
  20.     -> FROM notas;
  21. +------+----------+-------------+--------+-----------+----------+------------+
  22. | id   | nombre   | matematicas | lengua | naturales | sociales | nota_mayor |
  23. +------+----------+-------------+--------+-----------+----------+------------+
  24. |    1 | juan     |           9 |      7 |        10 |        7 |         10 |
  25. |    2 | pepito   |          10 |      6 |         9 |        4 |         10 |
  26. |    3 | jaimito  |           8 |     10 |         8 |        3 |         10 |
  27. |    4 | leonardo |           8 |      9 |         9 |        8 |          9 |
  28. +------+----------+-------------+--------+-----------+----------+------------+
  29. 4 rows in set (0.00 sec)

La forma en que "pintas" estos datos, depende del lenguaje de programación que estés utilizando. Observa en el último de los casos, la máxima calificación se puede presentar en más de una columna (inclusive en todas las columnas), aquí depende de tú lógica de negocio si "pintas" todas de verde o sólo la primera.

Si te interesa saber el "nombre" de la materia con la mayor nota, en lugar de devolver la nota, devuelves el nombre:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     ->    id, nombre, matematicas, lengua, naturales, sociales,
  3.     ->    CASE WHEN (matematicas >= lengua AND matematicas >= naturales AND matematicas >= sociales) THEN 'matematicas'
  4.     ->         WHEN (lengua >= matematicas AND lengua >= naturales AND lengua >= sociales) THEN 'lengua'
  5.     ->         WHEN (naturales >= matematicas AND naturales >= lengua AND naturales >= sociales) THEN 'naturales'
  6.     ->         WHEN (sociales >= matematicas AND sociales >= lengua AND sociales >= naturales) THEN 'sociales'
  7.     ->    END nota_mayor
  8.     -> FROM notas;
  9. +------+----------+-------------+--------+-----------+----------+-------------+
  10. | id   | nombre   | matematicas | lengua | naturales | sociales | nota_mayor  |
  11. +------+----------+-------------+--------+-----------+----------+-------------+
  12. |    1 | juan     |           9 |      7 |        10 |        7 | naturales   |
  13. |    2 | pepito   |          10 |      6 |         9 |        4 | matematicas |
  14. |    3 | jaimito  |           8 |     10 |         8 |        3 | lengua      |
  15. |    4 | leonardo |           8 |      9 |         9 |        8 | lengua      |
  16. +------+----------+-------------+--------+-----------+----------+-------------+
  17. 4 rows in set (0.00 sec)

Otra vez, en el último de los casos, hay dos materias con la calificación más alta (Lengua y naturales), en este caso sólo presenta la primera...

Saludos
Leo.
  #4 (permalink)  
Antiguo 27/11/2014, 23:34
 
Fecha de Ingreso: noviembre-2005
Mensajes: 144
Antigüedad: 18 años, 5 meses
Puntos: 2
Respuesta: Seleccionar el maximo de varias columnas

Gracias leonardo por tu respuesta, yo esperaba conseguir la mayor nota de cada materia, no la mayor nota de cada alumno,

Trabajo con php y mysql, finalmente tuve que hacerlo en php con arrays con una function y usando max();

SAludos

Etiquetas: columnas, maximo, query, select, sql-server, tabla
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 12:37.