La Web del Programador: Comunidad de Programadores
http://www.lawebdelprogramador.com/foros/MySQL/1165255-Select_from_hell.html
Mensajes realizados anteriormente (No estaban la última vez que entraste)Select * from hell;
Txarly (04/12/2009 09:28:24)
3.269 visitas
2 respuestas
Mensajes realizados anteriormente (No estaban la última vez que entraste)RE:Select * from hell;
Gonzalo GC (04/12/2009 12:17:04)
Mensajes realizados anteriormente (No estaban la última vez que entraste)RE:Select * from hell;
Txarly (04/12/2009 12:55:23)

Select * from hell;

Publicado por Txarly (2 intervenciones) el 04/12/2009 09:28:24
Buenas a todos.
Sobre una BD de una competición deportiva por equipos.

He de resolver una consulta un tanto larga, la cuestión se me atraganta cuando llego al punto en que he de encontrar el nombre de los equipos que han ganado n veces como visitante.

Mi idea inicial era: (con 3 victorias de visitante)

select partido.nombre_visitante from partido where 3<(select count(partido.pts_visitante > partido.pts_local));

Y utilizar un group by al final. Obviamente esto es una magna chapuza que no funciona. La cosa es que tengo la sensación de que no puede ser muy complicado, pero no lo veo.

Muchas gracias y saludos.

RE:Select * from hell;

Publicado por Gonzalo GC (339 intervenciones) el 04/12/2009 12:17:04
No se puede usar funciones de agrupamiento en el WHERE. Para eso existe el HAVING.
Sería mas o menos así:

SELECT nombre_visitante
FROM partido
HAVING COUNT(pts_visitante)>=3
GROUP BY nombre_visitante;

Esto devolvería el nombre_visitante de aquellos equipos que tengan un valor no nulo en pts_visitante. Si el campo puede tener cero (0) y no NULL, y cada punto es una victoria, es mejor usar SUM:

SELECT nombre_visitante
FROM partido
HAVING SUM(pts_visitante)>=3
GROUP BY nombre_visitante;

o bien

SELECT nombre_visitante, SUM(pts_visitante) puntos
FROM partido
HAVING puntos>=3
GROUP BY nombre_visitante;

RE:Select * from hell;

Publicado por Txarly (2 intervenciones) el 04/12/2009 12:55:23
Muchas gracias por tu respuesta. En realidad los puntos hacen referencia a canastas marcadas por partido, son equipos de baloncesto, culpa mia por no especificar más.

De todos modos creo que con el 'having' podré solucionar la consulta. La verdad es que no lo he tenido en cuenta en ninigún momento, no lo recordaba.

Gracias y saludos.