sql >> Base de Datos >  >> RDS >> Sqlserver

Comprender la relación entre las funciones de clasificación, OVER(), GROUP BY?

El OVER() Se necesita una cláusula para que SQL Server sepa exactamente cómo desea determinar cosas como RANK() . Qué RANK() ¿Qué espera si no proporciona a SQL Server un criterio de pedido? ¿El ganador de una carrera es el que tiene el tiempo más rápido, el más lento o el nombre en orden alfabético?

No es necesario que elimine el ORDER BY cláusula cuando agrega un ORDER BY cláusula dentro de OVER() . Estos se usan de forma independiente:uno para determinar el RANK() y el otro para dictar pedidos.

Entonces, por ejemplo, si quisiera devolver los finalistas de una carrera, pero ordenarlos del último lugar al primero, podría decir:

SELECT 
  name, 
  finish_time, 
  [rank] = RANK() OVER (ORDER BY finish_time) -- fastest first
FROM 
  dbo.race_table
ORDER BY 
  finish_time DESC; -- fastest last