RANKING con SQL

11/02/2004 - 16:31 por PA | Informe spam
Hola que tal?

mi problema es no saber como hacer con sql lo siguiente:
Yo registro en una tabla JUGDAS un IDJUGADOR y un PUNTAJE

lo que hago es lo siguiente.
primero que me tire los 10 primeros puestos... esto es sencillo.

select top 10 idjugador, sum (puntaje) as suma from jugadas
group by idjugador
order by suma desc

pero lo que nose como hacer es que luego de ese listado me tire la posicion
de otro jugador que por ejemplo esta nro 42.


en otras palabras el resultado que quisiera obtener es el sig.:
el jugador 11 participa del juego, obtiene 1 punto y al finalizar se le
muestra los primeros 10 puestos y el puesto de el que en este caso seria el
42

pos IDJUGADOR PUNTOS
1 1 100
2 2 90
3 3 80
4 4 70
5 5 60
6 6 50

7 7 40

8 8 30

9 9 20
10 10 10

42 11 1


yo lo que necesito es ese 42!!!!!!!!!!!!!
la primer parte la obtengo con la consulta arriba mensionada pero la
posicion del jugador 11 como la obtengo?

espero que me puedan ayudar...


saludos

Pablo

Preguntas similare

Leer las respuestas

#6 Javier Loria
11/02/2004 - 18:01 | Informe spam
Hola Pablo:
Vamos a ver si me puedo explicar porque este tipo de consulta es bien
compleja.
Lo primero es que en SQL no existe ese concepto de numero de fila y hay que
crearlo con un "truco". En este caso si la consulta que da los resultados
que deseas numerar es:
=SELECT IdJugador,
SUM(Puntaje) as Suma
FROM Jugadas
GROUP BY IdJugador
=Una consulta que numera la posicion del jugador con respecto al conjunto
seria:
=SELECT COUNT(*) AS Posicion
, J1.IdJugador
, J1.Suma
FROM ( SELECT IdJugador, SUM(Puntaje) as Suma
FROM Jugadas GROUP BY IdJugador
)AS J1
JOIN ( SELECT IdJugador, SUM(Puntaje) as Suma
FROM Jugadas GROUP BY IdJugador
)AS J2
ON J1.Suma<=J2.Suma
GROUP BY , J1.IdJugador
, J1.Suma
= Esta consulta cuenta cuantos jugadores tuvieron mas o igual cantidad de
puntos incluyendo al mismo jugador, lo cual en empates da la posicion mas
baja(el numero mas alto), si requieres la posicion mas alta (numero mas
bajo) cambia la condicion del ON a J1.Suma<J2.Suma y agrega uno al COUNT(*).
Si toda esta consulta es la encierras entre parentis y le pones un
filtro deberas tener la fila deseada:
=SELECT *
FROM (.) AS T1
WHERE T1.IdJugador=@IdJugador

Este codigo NO es rapido, y es complejo darle mantenimiento. Pero espero te
sirva,

Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

PA escribio:
Mostrar la cita
#7 Norman A. Armas
11/02/2004 - 18:03 | Informe spam
Tu leistes bien mi propuesta?
Porque de ser asi no entendistes para nada mi solucion.
Leela de nuevo y emite el criterio despues.

Saludos,

Norman



"PA" wrote in message
news:
Mostrar la cita
que
Mostrar la cita
posicion
Mostrar la cita
le
Mostrar la cita
seria
Mostrar la cita
#8 Maximiliano D. A.
11/02/2004 - 18:43 | Informe spam
Norman es buena esa solucion!!! y mas facil de administrar, claro tenes una
tabla tenporal no? pero vale
igual.
Maximiliano Damian Accotto


"Norman A. Armas" escribió en el mensaje
news:%
Mostrar la cita
#9 ulises
11/02/2004 - 23:58 | Informe spam
Una más para la carpeta "\Tips JLoria\" :)

Saludos,
Ulises

Mostrar la cita
consulta es bien
Mostrar la cita
de fila y hay que
Mostrar la cita
da los resultados
Mostrar la cita
respecto al conjunto
Mostrar la cita
igual cantidad de
Mostrar la cita
la posicion mas
Mostrar la cita
alta (numero mas
Mostrar la cita
agrega uno al COUNT(*).
Mostrar la cita
y le pones un
Mostrar la cita
mantenimiento. Pero espero te
Mostrar la cita
PUNTAJE
Mostrar la cita
sencillo.
Mostrar la cita
from jugadas
Mostrar la cita
me tire la
Mostrar la cita
el sig.:
Mostrar la cita
finalizar se
Mostrar la cita
que en este caso
Mostrar la cita
100
Mostrar la cita
90
Mostrar la cita
80
Mostrar la cita
70
Mostrar la cita
60
Mostrar la cita
50
Mostrar la cita
40
Mostrar la cita
30
Mostrar la cita
20
Mostrar la cita
mensionada pero la
Mostrar la cita
#10 Manuel Etcheto
12/02/2004 - 05:41 | Informe spam
Hola Pablo
Te había enviado a la tarde un sp al grupo de ASP para
recoger solamente la posición de un determinado jugador,
sin cursor ni tabla temporal
Aquí te mando uno más completo, para obtener todo desde
asp con un solo Command (1 Rset + 2 parámetros de salida)

CREATE PROCEDURE Top10MasPuntajeyRankingPropio
(@miCodigo int, @mipuntaje int output, @miranking int
output)
AS
SELECT @mipuntaje = SUM(puntaje) FROM Jugadas
WHERE idjugador = @micodigo
SELECT @miranking = COUNT(cant) + 1 FROM
(SELECT COUNT(idjugador) cant FROM Jugadas
GROUP BY idjugador HAVING SUM(puntaje) > @mipuntaje) as T
SELECT TOP 10 WITH TIES idjugador, SUM(puntaje) AS suma
FROM Jugadas
GROUP BY idjugador
ORDER BY suma DESC
GO

Suerte
Manuel

Mostrar la cita
sencillo.
Mostrar la cita
jugadas
Mostrar la cita
me tire la posicion
Mostrar la cita
sig.:
Mostrar la cita
finalizar se le
Mostrar la cita
este caso seria el
Mostrar la cita
mensionada pero la
Mostrar la cita
Ads by Google
Search Busqueda sugerida