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

Mệnh đề TSQL OVER:COUNT (*) OVER (ORDER BY a)

Nó cung cấp tổng số đang chạy (chức năng này không được triển khai trong SQL Server cho đến phiên bản 2012 .)

ORDER BY xác định cửa sổ được tổng hợp với UNBOUNDED PRECEDINGCURRENT ROW làm mặc định khi không được chỉ định. SQL Server mặc định là hoạt động kém hơn RANGE thay vì ROWS .

Chúng có ngữ nghĩa khác nhau trong trường hợp ràng buộc trong cửa sổ cho RANGE phiên bản không chỉ bao gồm hàng hiện tại (và các hàng trước đó) mà còn bao gồm bất kỳ hàng liên kết bổ sung nào có cùng giá trị a như hàng hiện tại. Điều này có thể được nhìn thấy trong số hàng được tính theo từng hàng trong kết quả bên dưới.

SELECT  a, 
        b,
        COUNT(*) OVER (ORDER BY a 
                         ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS  [Rows],
        COUNT(*) OVER (ORDER BY a 
                         RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS [Range],
        COUNT(*) OVER() AS [Over()]
    FROM    t;

Trả lại

a        b        Rows        Range       Over()
-------- -------- ----------- ----------- -----------
NULL     NULL     1           4           12
NULL     NULL     2           4           12
NULL     NULL     3           4           12
NULL     NULL     4           4           12
a        b        5           7           12
a        b        6           7           12
a        b        7           7           12
c        d        8           11          12
c        d        9           11          12
c        d        10          11          12
c        d        11          11          12
e        NULL     12          12          12

Để đạt được kết quả mà bạn mong đợi, hãy bỏ qua cả hai PARTITION BYORDER BY và sử dụng OVER() trống mệnh đề (cũng được hiển thị ở trên).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt giữa chỉ mục được phân nhóm và không phân nhóm

  2. pyodbc không thể kết nối với cơ sở dữ liệu

  3. SQL Server 2008 CTE đệ quy

  4. Làm thế nào để tạo một cột xem KHÔNG ĐẦY ĐỦ

  5. Cách quyết định khi nào sử dụng chỉ mục trên cột bảng