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

Cách trả về số lượng hàng trong kết quả truy vấn trong SQL Server

Khi làm việc với cơ sở dữ liệu, đôi khi bạn muốn tìm xem có bao nhiêu hàng sẽ được trả về bởi một truy vấn mà không thực sự trả về kết quả của truy vấn. Hoặc đôi khi bạn có thể chỉ muốn tìm xem có bao nhiêu hàng trong một bảng nhất định.

Trong SQL Server, bạn có thể sử dụng COUNT() của T-SQL hàm để trả về số hàng sẽ được trả về trong một truy vấn.

Dữ liệu

Dưới đây là dữ liệu chúng tôi sẽ sử dụng trong các ví dụ trên trang này:

 CHỌN * TỪ Tasks; 

Kết quả:

 TaskId TaskName TaskDescription TaskCode (Mã tác vụ) --------------------------------- ---------------- 1 Nguồn cấp dữ liệu mèo TBA rỗng 2 Chó nước TBA rỗng 3 Vườn cho ăn TBA rỗng 4 Thảm sơn TBA rỗng 5 Mái nhà sạch TBA rỗng 6 Cho mèo ăn TBA rỗng 

Ví dụ - Đếm tất cả các hàng trong một bảng

Đây là một ví dụ về việc sử dụng COUNT() hàm trả về tổng số hàng trong bảng:

 CHỌN COUNT (*) TỪ Nhiệm vụ; 

Kết quả:

 6 

Điều này trả về số hàng trong bảng vì chúng tôi không cung cấp bất kỳ tiêu chí nào để thu hẹp kết quả.

Ví dụ - Thêm tiêu chí

Dưới đây là một ví dụ về đếm số lượng hàng sẽ được trả lại dựa trên một tiêu chí nhất định:

 CHỌN ĐẾM (*) TỪ TasksWHERE TaskName LIKE '% dog%' HOẶC TaskName LIKE '% cat%'; 

Kết quả:

 3 

Ví dụ - Chỉ định một cột duy nhất

Các ví dụ trước đều sử dụng dấu hoa thị để áp dụng số lượng cho tất cả các cột. Bạn cũng có tùy chọn để chỉ định một cột cụ thể.

Ví dụ:

 CHỌN COUNT (Tên tác vụ) TỪ Nhiệm vụ; 

Kết quả:

 6 

Mặc dù ví dụ này trả về cùng một kết quả mà chúng tôi nhận được khi sử dụng dấu hoa thị, nhưng điều đó không nhất thiết luôn đúng như vậy. Ví dụ:đây là những gì sẽ xảy ra nếu chúng tôi chỉ định một cột khác:

 CHỌN ĐẾM (Mã tác vụ) TỪ Nhiệm vụ; 

Kết quả:

 0 

Trong trường hợp này, chúng tôi nhận được 0, bởi vì cột cụ thể đó chứa các giá trị rỗng trong mọi hàng.

Ví dụ - Khác biệt

Bạn có thể thêm DISTINCT đối số để chỉ trả về số lượng giá trị duy nhất (không rỗng).

Bạn có thể nhận thấy rằng mọi hàng trong TaskDescription của chúng tôi cột chứa cùng một giá trị (“TBA”). Và TaskName cũng có giá trị trùng lặp (“Cho mèo ăn” xuất hiện hai lần). Điều này có thể gây ra sự cố nếu bạn không muốn tính các bản sao.

Đây là giao diện nếu chúng tôi áp dụng DISTINCT đối số cho TaskName cột:

 CHỌN ĐẾM (DISTINCT Tên tác vụ) TỪ Nhiệm vụ; 

Kết quả:

 5 

Và ở đây nó được áp dụng cho TaskDescription bảng (trong đó tất cả các giá trị đều giống nhau):

 CHỌN ĐẾM (DISTINCT TaskDescription) FROM Tasks; 

Kết quả:

 1 

Ví dụ - Mệnh đề HAVING

Bạn cũng có thể sử dụng COUNT() với HAVING mệnh đề giới hạn tập hợp kết quả dựa trên số hàng sẽ được trả về.

Ví dụ:

 USE Music; SELECT ar.ArtistName, COUNT (al.AlbumName) 'Album Count'FROM Nghệ sĩ arINNER THAM GIA Album al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT (al.AlbumName)> 1;  

Kết quả:

 Số lượng album tên nghệ sĩ ----------------------------- Allan Holdsworth 2 Devin Townsend 3 Iron Maiden 5 Michael Learns to Rock 3 Tom Jones 3 

Ví dụ này sử dụng một cơ sở dữ liệu khác với các ví dụ trước. Nó chỉ trả về những nghệ sĩ đã phát hành nhiều hơn 1 album. Chúng tôi có thể thay đổi con số đó với bất kỳ số lượng album nào mà chúng tôi muốn:

 USE Music; SELECT ar.ArtistName, COUNT (al.AlbumName) 'Album Count'FROM Nghệ sĩ arINNER THAM GIA Album al ON ar.ArtistId =al.ArtistIdGROUP BY ar.ArtistNameHAVING COUNT (al.AlbumName)> 4;  

Kết quả:

 Số lượng album tên nghệ sĩ ------------------------------- Iron Maiden 5 

Hàm COUNT_BIG ()

T-SQL cũng có COUNT_BIG() hàm hoạt động chính xác như COUNT() , ngoại trừ COUNT() đó trả về một int kiểu dữ liệu và COUNT_BIG() trả về bigint kiểu dữ liệu.

Chức năng này có thể hữu ích cho các dạng xem được lập chỉ mục với các truy vấn được nhóm lại. Bạn có thể tìm thấy nếu bạn cố gắng tạo chỉ mục cho một dạng xem có chứa COUNT(*) , mà bạn gặp lỗi như sau:

 Không thể tạo chỉ mục trên chế độ xem "Music.dbo.AlbumsByArtist" vì nó sử dụng COUNT tổng hợp. Sử dụng COUNT_BIG thay thế. 

Trong những trường hợp như vậy, hãy thay đổi chế độ xem để sử dụng COUNT_BIG(*) sẽ giải quyết được vấ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. Tôi đã nâng cấp Trình điều khiển ODBC SQL Server và hiệu suất đã bị ảnh hưởng tiêu cực. Tôi có thể làm gì?

  2. Vấn đề triển khai báo cáo SSRS 2014

  3. Hướng dẫn sử dụng SQL Server - Mọi thứ bạn cần để thành thạo Transact-SQL

  4. Chèn hàng loạt chậm cho bảng có nhiều chỉ mục

  5. Cách sử dụng FILEPROPERTY () trong SQL Server