Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Hiểu mối quan hệ giữa các hàm xếp hạng, OVER (), GROUP BY?

OVER() mệnh đề cần thiết để SQL Server biết chính xác cách bạn muốn xác định những thứ như RANK() . Cái gì RANK() bạn có mong đợi nếu bạn không cung cấp SQL Server với một tiêu chí đặt hàng không? Người chiến thắng cuộc đua là người có thời gian nhanh nhất, thời gian chậm nhất hay tên theo thứ tự bảng chữ cái đầu tiên?

Bạn không cần xóa ORDER BY khi bạn thêm ORDER BY mệnh đề bên trong OVER() . Chúng được sử dụng độc lập - một để xác định RANK() và cái kia để ra lệnh đặt hàng.

Vì vậy, ví dụ:nếu bạn muốn đưa người về đích của một cuộc đua nhưng xếp họ ở vị trí cuối cùng với vị trí đầu tiên, bạn có thể nói:

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. Nhận giá trị trả về từ quy trình lưu trữ SQL bằng PHP

  2. Tách các giá trị được phân tách trong một cột SQL thành nhiều hàng

  3. Giải thích một số toán tử SQL Server

  4. Hiệu suất truy vấn Entity Framework khác hẳn với việc thực thi SQL thô

  5. Sự khác biệt về thời gian thực hiện thủ tục được lưu trữ trong SQL