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

Sacar el signo de un partido de futbol

Estas en el tema de Sacar el signo de un partido de futbol en el foro de Mysql en Foros del Web. Buenas, Tengo dos columnas una con los goles locales y otra con los goles visitantes, me gustaria crear una columna que fuese el signo y ...
  #1 (permalink)  
Antiguo 01/03/2013, 10:13
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Sacar el signo de un partido de futbol

Buenas,

Tengo dos columnas una con los goles locales y otra con los goles visitantes, me gustaria crear una columna que fuese el signo y me dijese si es 1, X o 2 el resultado del partido.

Estoy probando de concatenar varios case sin exito, solo consigo que me funcione por separado, ejemplo:

Código MySQL:
Ver original
  1. SELECT FTL, FTV, case when ftl > ftv then '1' else 0 end as 'Signo1X2' FROM partidos;
  2. SELECT FTL, FTV, case when ftl = ftv then 'X' else 0 end as 'Signo1X2' FROM partidos;
  3. SELECT FTL, FTV, case when ftl < ftv then '2' else 0 end as 'Signo1X2' FROM partidos;

¿Se os ocurre alguna forma para sacar la columna del signo?

Muchas gracias de antemano!

Última edición por gnzsoloyo; 01/03/2013 a las 10:15 Razón: SQL sin etiquetar.
  #2 (permalink)  
Antiguo 01/03/2013, 10:17
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: Sacar el signo de un partido de futbol

Para mi, CASE es siempre un mal vicio de los programadores. En SQL hay modos más simples, en especial cuando tienes un numero limitadísimo de posibilidades:

Código MySQL:
Ver original
  1.     FTL,  
  2.     FTV,  
  3.     IF(ftl > ftv, 1, IF(ftl > ftv, 2, 'X')) Signo1X2
  4. FROM partidos;
__________________
¿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 01/03/2013, 17:30
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Sacar el signo de un partido de futbol

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Para mi, CASE es siempre un mal vicio de los programadores. En SQL hay modos más simples, en especial cuando tienes un numero limitadísimo de posibilidades:

Código MySQL:
Ver original
  1.     FTL,  
  2.     FTV,  
  3.     IF(ftl > ftv, 1, IF(ftl > ftv, 2, 'X')) Signo1X2
  4. FROM partidos;
Gracias gnzsoloyo,

Habia un error en uno de los simbolos, pero ya ta solucionado.

IF(ftl > ftv, 1, IF(ftl < ftv, 2, 'X')) Signo1X2

Muchas gracias!
  #4 (permalink)  
Antiguo 01/03/2013, 17:40
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: Sacar el signo de un partido de futbol

Tienes razón, me olvidé de invertir la desigualdad en el FALSE...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 01/03/2013, 17:49
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Sacar el signo de un partido de futbol

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes razón, me olvidé de invertir la desigualdad en el FALSE...
Si tengo el pronostico y el signo final que acabo de calcular con la consulta anterior. ¿Sería necesario crear un vista intermedia para poder sacar una columna más que me dijera si el pronostico fue "Acierto" o no? (ej. 1 para acierto y 0 para fallo).


Código MySQL:
Ver original
  1. ftl        ftv       pronostico       Signo1X2
  2. 2          2          2X                   X
  3. 0          0          1                      X
  4. 1          1          1X                   X
  5. 4          0          1X                   1
  6. 0          0          1                      X
  7. 2          0          1                      1
  8. 2          0          1                      1
  9. 2          1          1                      1
  10. 1          2          2                      2
  11. 2          0          1X                   1
  12. 1          0          2                      1
  13. 0          2          1X                   2
  14. 2          1          1                      1
  15. 0          2          21                    2
Estoy probando así, pero todos me los detecta como fallos, no se si es porque estoy utilizando una columna que acabo de crear

Código MySQL:
Ver original
  1. SELECT idpartido, pais, ftl, ftv, pronostico,
  2. IF(ftl > ftv, 1, IF(ftl < ftv, 2, 'X')) 'Signo1X2',
  3. IF('pronostico' = 'Signo1X2', 1, 0) 'Aciertos1X2'
  4. from partidos

¿Es posible?

Muchas gracias de antemano

Última edición por gnzsoloyo; 01/03/2013 a las 20:05
  #6 (permalink)  
Antiguo 01/03/2013, 20:14
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: Sacar el signo de un partido de futbol

Una vista, no, pero si no quieres complicarlo, te conviene transformar la consulta inicial en una subconsulta. Es mucho más sencillo.
Código MySQL:
Ver original
  1.     idpartido,
  2.     pais,
  3.     ftl,
  4.     ftv,
  5.     pronostico,
  6.     IF(pronostico = Signo1X2, 1, 0) Aciertos1X2
  7.         idpartido,
  8.         pais,
  9.         ftl,
  10.         ftv,
  11.         pronostico,
  12.         IF(ftl > ftv, 1, IF(ftl < ftv, 2, 'X')) Signo1X2
  13.     FROM partidos) t1

Dos detalles:
1) No confundas los acentos graves (`) con los apóstrofos ('). Los primeros se usan para nombres de tablas, bases, columnas y alias (no obligatorio salvo ciertas condiciones); los segundos se usan exclusivamente para cadenas de texto.
En este contexto:
Código MySQL:
Ver original
  1. IF('pronostico' = 'Signo1X2', 1, 0) 'Aciertos1X2'
"pronostico" y "Signo1X2" son cadenas de texto y no alias.
No es obligatorio usar los acentos graves a menos que sean para evitar problemas con palabras reservadas, o que el nombre del objeto tenga caracteres especiales (como espacios en blanco, signos aritméticos o cosas semejantes).

2) Los alias puestos a las columnas no se pueden usar en el mismo SELECT donde se definieron, ni tampoco en el WHERE. Nunca.
Eso significa que esto:
Código MySQL:
Ver original
  1. SELECT idpartido, pais, ftl, ftv, pronostico,
  2.     IF(ftl > ftv, 1, IF(ftl < ftv, 2, 'X')) Signo1X2,
  3.     IF(pronostico = Signo1X2, 1, 0) Aciertos1X2
  4. FROM partidos
Hubiese dado un error por "columna desconocida" para Signo1X2.

Tip final: Cuando postees código de cualquier tipo, por favor usa el Highlight adecuado. Eso facilitará la comprensión de los mismos, y además el resaltado de colores te ayudará a ver errores de sintaxis evidentes.
El combo que está en la ventana de edición sirve para eso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 02/03/2013, 18:41
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Sacar el signo de un partido de futbol

Gracias gnzsoloyo,

Solo encuentro un pequeño fallo y es que en el modelo de dato con el que trabajo la columna pronostico no solo tiene 1 simbolo, hay veces que son 1X 2X, 12, etc... veo que al no coincidir literalmente falla.


Ejemplo (no uso el highlight aqui para que se vean los que marco en rojo)
Los que marco en rojo también debería haberlos marcado como acierto.

ftl ftv pronostico Aciertos1X2
2 2 2X 0
0 0 1 0
1 1 1X 0
4 0 1X 0

0 0 1 0
2 0 1 1
2 0 1 1
2 1 1 1
1 2 2 1
2 0 1X 0
1 0 2 0
0 2 1X 0
2 1 1 1
0 2 21 0

¿Se puede intentar algo así como buscar el signo del partido dentro de la cadena pronostico?

Probé cambiando el = por un like pero el resultado fue el mismo

Código MySQL:
Ver original
  1.         idpartido,
  2.         pais,
  3.         ftl,
  4.         ftv,
  5.         pronostico,
  6.         IF(pronostico like Signo1X2, 1, 0) Aciertos1X2
  7.     FROM (SELECT
  8.             idpartido,
  9.             pais,
  10.             ftl,
  11.             ftv,
  12.             pronostico,
  13.             IF(ftl > ftv, 1, IF(ftl < ftv, 2, 'X')) Signo1X2
  14.         FROM partidos) t1

No se puede hacer el IF comparando strings?

Muchas gracias de antemano!
  #8 (permalink)  
Antiguo 02/03/2013, 18:47
Avatar de neodani  
Fecha de Ingreso: marzo-2007
Mensajes: 1.811
Antigüedad: 17 años, 1 mes
Puntos: 20
Respuesta: Sacar el signo de un partido de futbol

Conseguido!

Código MySQL:
Ver original
  1.         idpartido,
  2.         pais,
  3.         ftl,
  4.         ftv,
  5.         pronostico,
  6.         IF(position(Signo1X2  in pronostico), 1, 0) Aciertos1X2
  7.     FROM (SELECT
  8.             idpartido,
  9.             pais,
  10.             ftl,
  11.             ftv,
  12.             pronostico,
  13.             IF(ftl > ftv, 1, IF(ftl < ftv, 2, 'X')) Signo1X2
  14.         FROM partidos) t1


Etiquetas: futbol, select, signo
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 14:06.