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

Buscar el titulo del mayor

Estas en el tema de Buscar el titulo del mayor en el foro de Mysql en Foros del Web. hola amigos Va el contexto: tengo una tabla: tbl_polinizacion tres campos: n1, n2 y n3 necesito agregar una columna mas que se llame "nivel" , ...
  #1 (permalink)  
Antiguo 22/08/2011, 15:58
Avatar de dorde  
Fecha de Ingreso: diciembre-2003
Mensajes: 145
Antigüedad: 20 años, 4 meses
Puntos: 7
Buscar el titulo del mayor

hola amigos

Va el contexto:

tengo una tabla: tbl_polinizacion
tres campos: n1, n2 y n3
necesito agregar una columna mas que se llame "nivel" , donde la consulta busque cual de los tres campos de cada registro es mayor ( n1 ó n2 ó n3) y me ponga en la columna "nivel" el nombre de la columna con el mayor resultado.

ejemplo

id n1 n2 n3 nivel
1 3 5 4 (Escriba aqui n2, por ser 5 el mayor valor y estar en la columna n2)

hice este pero no funciona:

SELECT MAX(`n1`) as max1, MAX(`n2`) as max2, MAX(`n3`) as max3,

CASE
WHEN max1>= max2 AND max1 >= max3 THEN 'column 1'
WHEN max2>= max1 AND max2 >= max3 THEN 'column 2'
WHEN max3>= max1 AND max3 >= max2 THEN 'column 3'
ELSE 'columna'
END AS mayor
FROM 1_polinizacion



agradezco su tiempo!

saludos
__________________
Pero si alguno de vosotros se ve falto de sabiduría, que la pida a Dios, el cual da a todos abundantemente y sin reproche, y le será dada. Pero que pida con fe, sin dudar

Santiago 1.5-6
  #2 (permalink)  
Antiguo 22/08/2011, 23:45
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Buscar el titulo del mayor

Hola @dorde puedes usar GREATEST

Código MySQL:
Ver original
  1. SELECT GREATEST(column1, column2, column3) as nivel FROM tbl_polinizacion
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 23/08/2011, 07:10
Avatar de dorde  
Fecha de Ingreso: diciembre-2003
Mensajes: 145
Antigüedad: 20 años, 4 meses
Puntos: 7
Respuesta: Buscar el titulo del mayor

Gracias andresdzphp, casi es la solución, pero esto que me pasas, me indica el valor máximo, no , el nombre de la columna que tiene el valor máximo...

BUSCARE POR ESE LADO , GRACIAS
__________________
Pero si alguno de vosotros se ve falto de sabiduría, que la pida a Dios, el cual da a todos abundantemente y sin reproche, y le será dada. Pero que pida con fe, sin dudar

Santiago 1.5-6
  #4 (permalink)  
Antiguo 23/08/2011, 07:59
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Buscar el titulo del mayor

Hola dorde:

Podrías implementar la función GREATEST que te propone andresdzphp dentro de una sentencia CASE-WHEN o IF, algo como esto:

Código MySQL:
Ver original
  1. mysql> CREATE TABLE tbl_polinizacion (n1 INT, n2 INT, n3 INT);
  2. Query OK, 0 rows affected (0.09 sec)
  3.  
  4. mysql> INSERT INTO tbl_polinizacion VALUES
  5.     -> (1,2,3),(3,3,7),(5,2,1),(6,8,7),(1,1,1);
  6. Query OK, 5 rows affected (0.06 sec)
  7. Records: 5  Duplicates: 0  Warnings: 0
  8.  
  9. mysql> SELECT * FROM tbl_polinizacion;
  10. +------+------+------+
  11. | n1   | n2   | n3   |
  12. +------+------+------+
  13. |    1 |    2 |    3 |
  14. |    3 |    3 |    7 |
  15. |    5 |    2 |    1 |
  16. |    6 |    8 |    7 |
  17. |    1 |    1 |    1 |
  18. +------+------+------+
  19. 5 rows in set (0.00 sec)
  20.  
  21. mysql> SELECT n1, n2, n3,
  22.     -> CASE WHEN GREATEST(n1, n2, n3) = n1 THEN 'n1' ELSE
  23.     -> CASE WHEN GREATEST(n1, n2, n3) = n2 THEN 'n2' ELSE
  24.     -> CASE WHEN GREATEST(n1, n2, n3) = n3 THEN 'n3' END END END mayor
  25.     -> FROM tbl_polinizacion;
  26. +------+------+------+-------+
  27. | n1   | n2   | n3   | mayor |
  28. +------+------+------+-------+
  29. |    1 |    2 |    3 | n3    |
  30. |    3 |    3 |    7 | n3    |
  31. |    5 |    2 |    1 | n1    |
  32. |    6 |    8 |    7 | n2    |
  33. |    1 |    1 |    1 | n1    |
  34. +------+------+------+-------+
  35. 5 rows in set (0.00 sec)

Aquí hay un detalle y es cuando más de una columna tiene el valor mayor (cómo en el último de los casos, donde todos los campos tienen el mismo valor). Siempre te pondrá la primer columna.

Dale un vistazo a ver si es lo que necesitas y nos comentas los resultados.

Saludos
Leo.
  #5 (permalink)  
Antiguo 23/08/2011, 14:10
Avatar de dorde  
Fecha de Ingreso: diciembre-2003
Mensajes: 145
Antigüedad: 20 años, 4 meses
Puntos: 7
Respuesta: Buscar el titulo del mayor

muchas muchas muchas gracias

quedo así... ahí entre lineas esta tu consulta!

Código MySQL:
Ver original
  1. select week(`tbl_1251_polinizadas_nivel`.`fechahora`,0) AS `semana`,`tbl_1251_polinizadas_nivel`.`id` AS `muestra`,
  2.  `tbl_1251_polinizadas_nivel`.`nopolinizadas` AS `nopolinizadas`,
  3.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel1` AS `Nivel1`,
  4.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2` AS `Nivel2`,
  5.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3` AS `Nivel3`,
  6.  ((`tbl_1251_polinizadas_nivel`.`polinizadas_nivel1` +
  7.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2`) +
  8.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3`) AS `todaspol`,
  9.  (((`tbl_1251_polinizadas_nivel`.`nopolinizadas` + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel1`) +
  10.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2`) + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3`) AS `todas`,
  11.  `tbl_1251_polinizadas_nivel`.`punto_id` AS `punto_id`,`tbl_1251_polinizadas_nivel`.`fechahora` AS `fechahora`,
  12.  `tbl_1070_predios`.`nombre` AS `nombre_predio`,
  13.  (`tbl_1251_polinizadas_nivel`.`nopolinizadas` / (((`tbl_1251_polinizadas_nivel`.`nopolinizadas` + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel1`) + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2`) +
  14.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3`)) AS `np`,
  15.  (`tbl_1251_polinizadas_nivel`.`polinizadas_nivel1` / (((`tbl_1251_polinizadas_nivel`.`nopolinizadas` + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel1`) + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2`) +
  16.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3`)) AS `n1`,
  17.  (`tbl_1251_polinizadas_nivel`.`polinizadas_nivel2` / (((`tbl_1251_polinizadas_nivel`.`nopolinizadas` + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel1`) + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2`) +
  18.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3`)) AS `n2`,
  19.  (`tbl_1251_polinizadas_nivel`.`polinizadas_nivel3` / (((`tbl_1251_polinizadas_nivel`.`nopolinizadas` + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel1`) + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2`) +
  20.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3`)) AS `n3`,
  21.  (((`tbl_1251_polinizadas_nivel`.`polinizadas_nivel1` + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2`) + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3`) / (((`tbl_1251_polinizadas_nivel`.`nopolinizadas` +
  22.  `tbl_1251_polinizadas_nivel`.`polinizadas_nivel1`) + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel2`)
  23.  + `tbl_1251_polinizadas_nivel`.`polinizadas_nivel3`)) AS `pol` ,
  24. GREATEST(`nopolinizadas`,`polinizadas_nivel1`, `polinizadas_nivel2`, `polinizadas_nivel3`) = `polinizadas_nivel1` THEN 'Nivel1' ELSE
  25. GREATEST(`nopolinizadas`,`polinizadas_nivel1`, `polinizadas_nivel2`, `polinizadas_nivel3`) = `polinizadas_nivel2` THEN 'Nivel2' ELSE
  26. GREATEST(`nopolinizadas`,`polinizadas_nivel1`, `polinizadas_nivel2`, `polinizadas_nivel3`) = `polinizadas_nivel3` THEN 'Nivel3' ELSE
  27. GREATEST(`nopolinizadas`,`polinizadas_nivel1`, `polinizadas_nivel2`, `polinizadas_nivel3`) = `nopolinizadas` THEN 'No Polinizadas' END END END END mayor
  28.  
  29.  from ((`tbl_1251_polinizadas_nivel`
  30.  join `tbl_1200_puntos`)
  31.  join `tbl_1070_predios`)
  32.  where ((`tbl_1200_puntos`.`id` = `tbl_1251_polinizadas_nivel`.`punto_id`)
  33.  and (`tbl_1070_predios`.`id` = `tbl_1200_puntos`.`predio_id`))
  34.  order by `tbl_1251_polinizadas_nivel`.`fechahora` desc
__________________
Pero si alguno de vosotros se ve falto de sabiduría, que la pida a Dios, el cual da a todos abundantemente y sin reproche, y le será dada. Pero que pida con fe, sin dudar

Santiago 1.5-6

Etiquetas: campos, mayor, select, tabla, titulo
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 18:38.