RANKING

11/02/2004 - 16:39 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 Freddy Cáceres
11/02/2004 - 17:59 | Informe spam
excelente.

ahora creo que lo de la tabla temporal seria mucho mas rapida y eficiente
por que te evitaria recorrer todo el resultado como lo estas haciendo con el
cursor.

haber si me esperas unos minutos mientars te hago un SP como ejemplo.

Saludos
-
Freddy Cáceres
Santiago - Chile

"PA" escribió en el mensaje
news:
Freddy, resolvi el problema de la siguiente manera, lo unico es que no me
gusta mucho por lo que hice fue crear un SP y dentro del mismo un
cursor
lo que hago es enviarle por parametro el ID del jugador y me devuelve la
posicion..

nose si es la mas eficiente pero se me ocurrio aso por el momento.

Gracias!!!




"Freddy Cáceres" @hotmail.com> escribió en el mensaje
news:
> mmmmm, buen desafio, se me ocurrio que el resultado lo podriamos


insertar
en
> una tabla temporal y que esta tabla temporal tenga un campo


autonumerico.
>
> luego hacer un selec sobre esa tabla temporal y eliminas la tabla
temporal,
> todo esto en un SP por supuesto.
>
> sobre que base estas trabajando?
>
> Saludos
> -
> Freddy Cáceres
> Santiago - Chile
>
> "PA" escribió en el mensaje
> news:
> > 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
> >
> >
> >
> >
> >
>
>


Respuesta Responder a este mensaje
#7 Freddy Cáceres
11/02/2004 - 18:20 | Informe spam
yap, acá estamos otra vez, entonces el SP seria así:

yo utilicé una tabla de comunas para el ejemplo, saco las comunas y las
inserto en una tabla temporal luego como resultado este SP me entrega lo que
hay en la tabla temporal con un código(Ranking), fíjate que este SP tiene
una sutileza si le pasas como en el parámetro @idCodigo =-1 este te devuelve
todos los datos y su ranking asignado, pero si @idCodigo <>-1 este te
entrega ese registro único y el ranking, como veras son poquitas líneas, sin
la sutileza serian tres líneas.

cualquier duda la plantes.

CREATE PROCEDURE Spv_Ranking (@idCodigo Int) AS

CREATE TABLE #MiTempTabla (
Ranking INT IDENTITY (1, 1) NOT NULL,
Codigo Int,
Comuna Varchar(50) )

insert into #MiTempTabla (Codigo, Comuna) select Codigo, Nombre from
comunas

IF @idCodigo = -1
select * from #MiTempTabla
else
select * from #MiTempTabla where codigo = @idCodigo
GO



Spv_Ranking @idCodigo  -- 10 es un codigo de comuna en mi ejemplo
Spv_Ranking @idCodigo =-1 -- traerá todas las comunas y un ranking asignado


Saludos
-
Freddy Cáceres
Santiago - Chile

"Freddy Cáceres" @hotmail.com> escribió en el mensaje
news:%
excelente.

ahora creo que lo de la tabla temporal seria mucho mas rapida y eficiente
por que te evitaria recorrer todo el resultado como lo estas haciendo con


el
cursor.

haber si me esperas unos minutos mientars te hago un SP como ejemplo.

Saludos
-
Freddy Cáceres
Santiago - Chile

"PA" escribió en el mensaje
news:
> Freddy, resolvi el problema de la siguiente manera, lo unico es que no


me
> gusta mucho por lo que hice fue crear un SP y dentro del mismo un
> cursor
> lo que hago es enviarle por parametro el ID del jugador y me devuelve la
> posicion..
>
> nose si es la mas eficiente pero se me ocurrio aso por el momento.
>
> Gracias!!!
>
>
>
>
> "Freddy Cáceres" @hotmail.com> escribió en el mensaje
> news:
> > mmmmm, buen desafio, se me ocurrio que el resultado lo podriamos
insertar
> en
> > una tabla temporal y que esta tabla temporal tenga un campo
autonumerico.
> >
> > luego hacer un selec sobre esa tabla temporal y eliminas la tabla
> temporal,
> > todo esto en un SP por supuesto.
> >
> > sobre que base estas trabajando?
> >
> > Saludos
> > -
> > Freddy Cáceres
> > Santiago - Chile
> >
> > "PA" escribió en el mensaje
> > news:
> > > 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
> > >
> > >
> > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#8 PA
11/02/2004 - 18:28 | Informe spam
GRACIAS FREDDY!!!!


"Freddy Cáceres" @hotmail.com> escribió en el mensaje
news:
yap, acá estamos otra vez, entonces el SP seria así:

yo utilicé una tabla de comunas para el ejemplo, saco las comunas y las
inserto en una tabla temporal luego como resultado este SP me entrega lo


que
hay en la tabla temporal con un código(Ranking), fíjate que este SP tiene
una sutileza si le pasas como en el parámetro @idCodigo =-1 este te


devuelve
todos los datos y su ranking asignado, pero si @idCodigo <>-1 este te
entrega ese registro único y el ranking, como veras son poquitas líneas,


sin
la sutileza serian tres líneas.

cualquier duda la plantes.

CREATE PROCEDURE Spv_Ranking (@idCodigo Int) AS

CREATE TABLE #MiTempTabla (
Ranking INT IDENTITY (1, 1) NOT NULL,
Codigo Int,
Comuna Varchar(50) )

insert into #MiTempTabla (Codigo, Comuna) select Codigo, Nombre from
comunas

IF @idCodigo = -1
select * from #MiTempTabla
else
select * from #MiTempTabla where codigo = @idCodigo
GO



Spv_Ranking @idCodigo  -- 10 es un codigo de comuna en mi ejemplo
Spv_Ranking @idCodigo =-1 -- traerá todas las comunas y un ranking


asignado


Saludos
-
Freddy Cáceres
Santiago - Chile

"Freddy Cáceres" @hotmail.com> escribió en el mensaje
news:%
> excelente.
>
> ahora creo que lo de la tabla temporal seria mucho mas rapida y


eficiente
> por que te evitaria recorrer todo el resultado como lo estas haciendo


con
el
> cursor.
>
> haber si me esperas unos minutos mientars te hago un SP como ejemplo.
>
> Saludos
> -
> Freddy Cáceres
> Santiago - Chile
>
> "PA" escribió en el mensaje
> news:
> > Freddy, resolvi el problema de la siguiente manera, lo unico es que no
me
> > gusta mucho por lo que hice fue crear un SP y dentro del mismo un
> > cursor
> > lo que hago es enviarle por parametro el ID del jugador y me devuelve


la
> > posicion..
> >
> > nose si es la mas eficiente pero se me ocurrio aso por el momento.
> >
> > Gracias!!!
> >
> >
> >
> >
> > "Freddy Cáceres" @hotmail.com> escribió en el mensaje
> > news:
> > > mmmmm, buen desafio, se me ocurrio que el resultado lo podriamos
> insertar
> > en
> > > una tabla temporal y que esta tabla temporal tenga un campo
> autonumerico.
> > >
> > > luego hacer un selec sobre esa tabla temporal y eliminas la tabla
> > temporal,
> > > todo esto en un SP por supuesto.
> > >
> > > sobre que base estas trabajando?
> > >
> > > Saludos
> > > -
> > > Freddy Cáceres
> > > Santiago - Chile
> > >
> > > "PA" escribió en el mensaje
> > > news:
> > > > 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
> > > >
> > > >
> > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#9 Manuel Etcheto
11/02/2004 - 19:14 | Informe spam
Hola Pablo
Creo que con esto te evitas la sobrecarga de una #temporal
y te lo paso como un parámetro de salida para evitar un
Recordset/Select con toda su carga de metadata.
CREATE PROCEDURE obtenerMiRanking
(@miCodigo int, @miranking int output)
AS
SELECT @miranking = COUNT(cant) + 1 FROM
(SELECT COUNT(idjugador) cant FROM Jugadas
GROUP BY idjugador HAVING SUM(puntaje) >
(SELECT SUM(puntaje) FROM Jugadas WHERE idjugador =
@micodigo)) as T
GO

Cuenta los que hay delante, o sea que si hay 41 con más de
1 punto, los que tengan 1 punto tendrán el ranking 42, no
importa que haya varios con 1 punto, y así
sucesivamente..., si no te encontrarías con un tipo que
tiene ranking 70 pero hay 30 adelante con su mismo puntaje.

Tendrías que agregarle la verificación de que exista ese
idjugador... porque si no te dará 1 como si fuera el mejor
jeje

Suerte
Manuel

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





.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida