MySQL - Nombre de columna según valor de un campo

 
Vista:
sin imagen de perfil

Nombre de columna según valor de un campo

Publicado por cristian (4 intervenciones) el 06/04/2015 17:37:31
Estimados: tengo esta consulta que funciona perfecto

SELECT codprovdepto, greatest(lista_47, lista_131, lista_132, lista_133, lista_134, lista_135, lista_137)
FROM RES2011
WHERE coddepto < 990

consulta una base de resltados electorales por codigo de provincia y departamento

lo que no me sale es saber de cuál de las columnas obtuvo el GREATEST

alguna idea?

muchas gracias! saludos. C
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
Imágen de perfil de Alberto

Nombre de columna según valor de un campo

Publicado por Alberto (26 intervenciones) el 06/04/2015 17:47:27
Hola...

Tu consulta veo que únicamente hace referencia a una sola tabla, por lo tanto, estas consultando el dato de la tabla RES2011, si tu consulta llegara a tener una relación con otra tabla y la tabla secundaria tuviera el mismo campo (GREATEST), entonces tendrías un error de ambigüedad en el MySQL, el cual significa que el motor de base de datos no sabe a cual campo de que tabla hacer referencia, pero por tu consulta, no veo problema alguno.
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

Nombre de columna según valor de un campo

Publicado por cristian (4 intervenciones) el 06/04/2015 17:54:44
Que tal .. la tabla es única,

sólo que GREATEST no es nombre de campo,

sino que selecciona el mayor valor entre los campos pedidos
(lista_47, lista_131, lista_132, lista_133, lista_134, lista_135, lista_137)

entonces, por ejemplo, para el codprovdepto 02001 me trae el valor 46534

| codprovdepto | valor |
-------------------------------------
| 02001 | 46534 |

lo que no encuentro es el modo de saber si 46534 corresponde al campo lista_47, lista_132, lista_133 etc ...

gracias por responder!
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
Imágen de perfil de Alberto

Nombre de columna según valor de un campo

Publicado por Alberto (26 intervenciones) el 06/04/2015 18:14:37
Hola...

Se me ocurren 3 opciones...

1.- Podrías separar cada lista con su respectivo titulo para así identificar de manera mas rápida que listas tienen valores y cuales no, eh de suponer que si te muestra tal resultado, entonces las demás no tienen nada. Algo parecido a esto...

1
SELECT codprovdepto, greatest(lista_47) AS lista47, greatest(lista_131) AS lista131,etc. FROM RES2011 WHERE coddepto < 990

2.- Intenta colocando un identificador al momento de mostrar la lista correspondiente. Así...

1
2
3
SELECT codprovdepto, greatest('lista47' = lista_47, lista_131, lista_132, lista_133, lista_134, lista_135, lista_137)
FROM RES2011
WHERE coddepto < 990

3.- Intenta colocando un etiqueta al momento de mostrar la lista correspondiente. Mira...

1
2
3
SELECT codprovdepto, greatest(lista_47 AS 'lista47', lista_131, lista_132, lista_133, lista_134, lista_135, lista_137)
FROM RES2011
WHERE coddepto < 990

Sinceramente, no estoy muy seguro de la segunda opción pero no se pierde nada con intentar, aunque como consejo se me hace mas correcta la primera opción.

Cualquier duda y/o inconveniente aquí estamos. Suerte!
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

Nombre de columna según valor de un campo

Publicado por cristian (4 intervenciones) el 06/04/2015 18:38:58
Estimado ..

Greatest no me acepta argumentos.
Estoy pensando en crear otra tabla "girada" para poder usar el max (por columna).
Si logro solucionarlo, les comento!

saludos!

C
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
Imágen de perfil de Alberto

Nombre de columna según valor de un campo

Publicado por Alberto (26 intervenciones) el 06/04/2015 18:54:01
Hola...

La primera opción que te proporcione, no tiene argumentos, únicamente agregue la propiedad AS la cual tiene como función cambiar el titulo de la columna por el que le escribas en esta propiedad, tal y como lo muestra el ejemplo que te proporcione.

Cualquier duda y/o inconveniente, aquí estamos. Suerte!
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: 17
Ha aumentado su posición en 4 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Nombre de columna según valor de un campo

Publicado por Hugo QN (32 intervenciones) el 09/04/2015 21:28:31
hola Cristian, prueba con esta logica.

SELECT mayorvalor.codprovdepto,
mayorvalor.valor,
CASE mayorvalor.valor
WHEN lista_47 THEN 'lista_47'
WHEN lista_131 THEN 'lista_131'
WHEN lista_132 THEN 'lista_132'
WHEN lista_133 THEN 'lista_133'
WHEN lista_134 THEN 'lista_134'
WHEN lista_135 THEN 'lista_135'
WHEN lista_137 THEN 'lista_137' END AS campoconvalor
FROM RES2011
INNER JOIN (SELECT codprovdepto,
greatest(lista_47, lista_131, lista_132, lista_133, lista_134, lista_135, lista_137) AS valor
FROM RES2011
WHERE coddepto < 990) mayorvalor
WHERE RES2011.codprovdepto = mayorvalor.codprovdepto

espero te ayude.

saludos.
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