lunes, 11 de junio de 2012

Nro de fila con SQL

Hoy me realizaron una consulta: Si habia alguna forma de hacer una consulta que te devuelva el nro. de fila, pero que no este relacionado con ningun campo de la tabla?

Por ejemplo, si tenemos una tabla que es un ranking, se puede ordenar en funcion del puntaje y que nos devuelva una columna que nos dice la posicion dentro del ranking.

Suponemos que tenemos una tabla como esta, con estos datos:


		CREATE TABLE `ranking` (
  `jugadores` varchar(255) default NULL,
  `puntaje` int(11) default NULL
);


INSERT INTO `ranking` VALUES ('Juan', '10');
INSERT INTO `ranking` VALUES ('Jose', '11');
INSERT INTO `ranking` VALUES ('Pedro', '12');
INSERT INTO `ranking` VALUES ('Guillermo', '22');
INSERT INTO `ranking` VALUES ('Pablo', '14');
		

Queremos ordenar los registros por el campo puntaje de mayor a menor, y que nos devuelva tres filas: posicion, jugadores y puntaje.

Para ello podriamos hacer una consulta como esta:


SET @row=0;
SELECT @row:= @row + 1 as posicion,jugadores,puntaje FROM ranking ORDER BY puntaje DESC;
		

Tendriamos un resultado como el siguiente:

posicion jugadores puntaje
1 Guillermo 22
2 Pablo 14
3 Pedro 12
4 Jose 11
5 Juan 10

 

1 comentario:

  1. SET @row=0;# MySQL ha devuelto un valor vacío (i.e., cero columnas).
    SELECT codigo, @row:= @row+1 AS Puesto, round( avg( notadefinitivaperiodo ) , 2)AS promedio
    FROM notas
    WHERE periodo =2
    AND curso =311
    GROUPBY codigo
    ORDERBY promedio DESC

    ResponderEliminar