MySQL bao gồm một COUNT()
, cho phép bạn tìm ra bao nhiêu hàng sẽ được trả về từ một truy vấn. Hàm này là một phần của tiêu chuẩn SQL và nó có thể được sử dụng với hầu hết các hệ quản trị cơ sở dữ liệu quan hệ.
COUNT()
cũng có thể được sử dụng để ảnh hưởng đến kết quả của truy vấn nếu được yêu cầu, ví dụ:bằng cách chỉ trả về những kết quả có số hàng lớn hơn số lượng đã cho.
Bài viết này chứa các ví dụ về COUNT()
sử dụng trong MySQL.
Dữ liệu
Đầu tiên, đây là dữ liệu chúng tôi sẽ sử dụng cho các ví dụ trên trang này:
CHỌN * TỪ Tasks;
Kết quả:
+ -------- + ------------------- + ----------------- + | TaskId | TaskName | TaskDescription | + -------- + ------------------- + ----------------- + | 1 | Làm vườn | NULL || 2 | Cho mèo ăn | NULL || 3 | Sơn mái tôn | NULL || 4 | Đưa chó đi dạo | NULL || 5 | Thư giãn | NULL || 6 | Cho mèo ăn | NULL | + -------- + ------------------- + ----------------- +
Đếm tất cả các hàng trong một bảng
Bạn có thể sử dụng COUNT()
để trả về tổng số hàng trong bảng:
CHỌN COUNT (*) TỪ Nhiệm vụ;
Kết quả:
+ ---------- + | ĐẾM (*) | + ---------- + | 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ả.
Thu hẹp kết quả
Khi chúng tôi thêm WHERE
mệnh đề thu hẹp tập kết quả, chúng ta nhận được một số nhỏ hơn:
CHỌN ĐẾM (*) TỪ TasksWHERE TaskName LIKE '% cat%';
Kết quả:
+ ---------- + | ĐẾM (*) | + ---------- + | 2 | + ---------- +
Một cột so với Dấu hoa thị (*)
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. Như với bất kỳ truy vấn nào, dấu hoa thị là tùy chọn và nó được sử dụng làm ký tự đại diện để trả về tất cả các cột. Vì vậy, khi sử dụng COUNT()
, bạn cũng có tùy chọn cung cấp các cột cụ thể (trái ngược với tất cả các cột) làm đối số.
Ví dụ:
CHỌN COUNT (Tên tác vụ) TỪ Nhiệm vụ;
Kết quả:
+ ----------------- + | ĐẾM (Tên tác vụ) | + ----------------- + | 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 COUNT (Mô tả Tác vụ) TỪ Nhiệm vụ;
Kết quả:
+ ------------------------ + | COUNT (TaskDescription) | + ------------------------ + | 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 các hàng không phải NULL
khác nhau giá trị.
Bạn có thể nhận thấy rằng TaskName
cột 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ả:
+ -------------------------- + | COUNT (Tên tác vụ DISTINCT) | + -------------------------- + | 5 | + -------------------------- +
Vì vậy, mặc dù bảng chứa sáu hàng, hai trong số đó là bản sao. Do đó, hai thứ đó được tính là một mà chúng ta nhận được kết quả là năm.
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ề.
Dưới đây là một ví dụ sử dụng tập dữ liệu khác với các ví dụ trước:
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ả:
+ ------------------------ + ------------- + | ArtistName | Lượt Album | + ------------------------ + ------------- + | Iron Maiden | 5 || Devin Townsend | 3 || Michael Học cách đá | 3 || Tom Jones | 3 || Allan Holdsworth | 2 | + ------------------------ + ------------- +Truy vấn này chỉ trả về những nghệ sĩ đã phát hành nhiều hơn 1 album. Đây là những gì sẽ xảy ra khi chúng tôi tăng giá trị trong
HAVING
mệnh đề: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ả:
+ ------------- + ------------- + | ArtistName | Số lượng album | + ------------- + ------------- + | Iron Maiden | 5 | + ------------- + ------------- +