Inicio > Curso básico de SQL Server 2008 > RANK(), DENSE_RANK(), NTILE() – Sql Server 2008

RANK(), DENSE_RANK(), NTILE() – Sql Server 2008


RANK() Si se especifica una expresión numérica, la función Rank determina el rango basado en uno de la tupla especificada mediante la evaluación de la expresión numérica especificada con la tupla. Si se especifica una expresión numérica, la función Rank asigna el mismo rango a las tuplas con valores duplicados del conjunto.

DENSE_RANK () Devuelve el rango de filas dentro de la partición de un conjunto de resultados, sin ningún espacio en la clasificación. El rango de una fila es uno más el número de rangos distintos anteriores a la fila en cuestión.

NTILE () Distribuye las filas de una partición ordenada en un número especificado de grupos. Los grupos se numeran a partir del uno. Para cada fila, NTILE devuelve el número del grupo al que pertenece la fila.

USE Pruebas
GO

CREATE TABLE Personas (ID INT IDENTITY, PRIMERNOMBRE VARCHAR(50) NOT NULL, SEGUNDONOMBRE VARCHAR(50) NOT NULL)
GO

DELETE FROM dbo.Personas
GO

INSERT INTO dbo.Personas VALUES(‘JUAN’,’AVILA’)
INSERT INTO dbo.Personas VALUES(‘ALDO’,’LADERAS’)
INSERT INTO dbo.Personas VALUES(‘ALDO’,’LADERAS’)
INSERT INTO dbo.Personas VALUES(‘ALDO’,’LADERAS’)
INSERT INTO dbo.Personas VALUES(‘JUAN’,’VICTORIO’)
INSERT INTO dbo.Personas VALUES(‘VICTOR’,’MORENO’)
INSERT INTO dbo.Personas VALUES(‘ADRIAN’,’LUNA’)
INSERT INTO dbo.Personas VALUES(‘ADRIAN’,’LUNA’)
INSERT INTO dbo.Personas VALUES(‘ADRIAN’,’AQUINO’)
INSERT INTO dbo.Personas VALUES(‘JUAN’,’SAAVEDRA’)
INSERT INTO dbo.Personas VALUES(‘JUAN’,’SAAVEDRA’)
INSERT INTO dbo.Personas VALUES(‘JUAN’,’SAAVEDRA’)
INSERT INTO dbo.Personas VALUES(‘JUAN’,’SAAVEDRA’)
INSERT INTO dbo.Personas VALUES(‘LUIS’,’SATTUI’)
INSERT INTO dbo.Personas VALUES(‘DANIEL’,’VILLARAN’)
INSERT INTO dbo.Personas VALUES(‘VICTOR’,’HUAMAN’)
INSERT INTO dbo.Personas VALUES(‘VICTOR’,’HUAMAN’)
INSERT INTO dbo.Personas VALUES(‘MIGUEL’,’HUAMAN’)
INSERT INTO dbo.Personas VALUES(‘LUIS’,’SANCHEZ’)

———————————————————————————————–
— Ejemplo sin partición
———————————————————————————————–

  SELECT PRIMERNOMBRE,SEGUNDONOMBRE,
  ROW_NUMBER() OVER(ORDER BY PRIMERNOMBRE,SEGUNDONOMBRE) AS ROW_NUMBER,
  RANK() OVER(ORDER BY PRIMERNOMBRE,SEGUNDONOMBRE) AS RANK,
  DENSE_RANK() OVER(ORDER BY PRIMERNOMBRE,SEGUNDONOMBRE) AS DENSE_RANK,
  NTILE(3) OVER(ORDER BY PRIMERNOMBRE,SEGUNDONOMBRE) AS ‘NTILE(3)’
  FROM dbo.Personas ORDER BY PRIMERNOMBRE
 
———————————————————————————————–
— Ejemplo con partición
———————————————————————————————–

  SELECT PRIMERNOMBRE,SEGUNDONOMBRE,
  ROW_NUMBER() OVER(PARTITION BY PRIMERNOMBRE ORDER BY SEGUNDONOMBRE)
  AS ROW_NUMBER,
  RANK() OVER(PARTITION BY PRIMERNOMBRE ORDER BY SEGUNDONOMBRE) AS RANK,
  DENSE_RANK() OVER(PARTITION BY PRIMERNOMBRE ORDER BY SEGUNDONOMBRE)
  AS DENSE_RANK,
  NTILE(3) OVER(PARTITION BY PRIMERNOMBRE ORDER BY SEGUNDONOMBRE) AS ‘NTILE(3)’
  FROM dbo.Personas ORDER BY PRIMERNOMBRE

———————————————————————————
— Ejemplo usando ROW_NUMBER en el where de la consulta
——————————————————————————–

  SELECT * FROM
    (SELECT PRIMERNOMBRE,ROW_NUMBER() OVER(ORDER BY PRIMERNOMBRE) AS ROW
     FROM dbo.Personas) TABLA
  WHERE ROW >=5 AND ROW <=10

  1. analyst
    28 junio 2012 a las 9:11 am

    Chaleeee es justo el tipo de ejemplos que andaba buscando pero aplicado a oracle y funciona, muchas gracias.

  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: