Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Capire la relazione tra le funzioni di classificazione, OVER(), GROUP BY?

Il OVER() è necessaria in modo che SQL Server sappia esattamente come si desidera determinare cose come RANK() . Cosa RANK() ti aspetti se non fornisci a SQL Server un criterio di ordinazione? Il vincitore di una gara è quello con il miglior tempo, il tempo più lento o il nome in ordine alfabetico?

Non è necessario rimuovere ORDER BY clausola quando aggiungi un ORDER BY clausola all'interno di OVER() . Questi sono usati indipendentemente - uno per determinare il RANK() e l'altro per dettare l'ordine.

Quindi, ad esempio, se desideri restituire i finalisti di una gara, ma ordinarli dall'ultimo al primo posto, potresti dire:

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