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 3Ví 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 5Hà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 đề.