Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Rozumiesz związek między funkcjami rankingu, OVER(), GROUP BY?

OVER() klauzula jest potrzebna, aby SQL Server dokładnie wiedział, jak chcesz określić takie rzeczy, jak RANK() . Co RANK() oczekujesz, jeśli nie dostarczysz SQL Server z kryteriami zamawiania? Czy zwycięzcą wyścigu jest ten z najszybszym czasem, najwolniejszym czasem, czy też z imieniem w kolejności alfabetycznej?

Nie musisz usuwać ORDER BY klauzula podczas dodawania ORDER BY klauzula wewnątrz OVER() . Są one używane niezależnie - jeden do określenia RANK() a drugi dyktuje zamawianie.

Na przykład, jeśli chcesz przywrócić finiszerów wyścigu, ale zamów im ostatnie miejsce na pierwsze miejsce, możesz powiedzieć:

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. Sortuj kolumny dla dynamicznego obrotu

  2. Procedura składowana, lewe sprzężenie daje mi zduplikowane wiersze, ale chcę wiersz górny(1) dla każdego rekordu o tym samym identyfikatorze

  3. SQL Server 2008 Zapytanie krzyżowe

  4. Użycie klauzuli OUTPUT do wstawienia wartości spoza INSERTED

  5. Jak w SQL można grupować według zakresów?