Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Разбиране на връзката между функциите за класиране, OVER(), GROUP BY?

OVER() клаузата е необходима, така че SQL Server да знае точно как искате да определи неща като RANK() . Какво RANK() очаквате ли, ако не предоставите на SQL Server критерии за поръчка? Дали победителят в състезание е този с най-бързо време, най-бавно време или първото име по азбучен ред?

Не е необходимо да премахвате ORDER BY клауза, когато добавите ORDER BY клауза вътре в OVER() . Те се използват независимо - един за определяне на RANK() а другият да диктува подреждането.

Така че, например, ако искате да върнете завършилите в състезание, но да ги подредите от последното място до първото, можете да кажете:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използвайте функцията за преобразуване на sql сървър, за да преобразувате хиджри в григорианска дата

  2. Ядрото на Entity Framework няма оптимална производителност

  3. Транзакция на разпределена база данни срещу транзакция на кръстосана база данни

  4. Каскадно копиране на редове в sql

  5. Поправете съобщение 8116 „Типът на данни за аргумента varchar е невалиден за аргумент 1 на функцията session_context“ в SQL Server