Ver Mensaje Individual
  #3 (permalink)  
Antiguo 24/11/2014, 10:54
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 4 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.