Trong MariaDB, COUNT()
hàm tổng hợp trả về số lượng các giá trị không phải NULL của một biểu thức trong các hàng được truy xuất bởi một SELECT
tuyên bố.
Dữ liệu mẫu
Giả sử chúng ta có bảng sau:
SELECT *
FROM Pets;
Kết quả:
+-------+-----------+---------+---------+------------+ | PetId | PetTypeId | OwnerId | PetName | DOB | +-------+-----------+---------+---------+------------+ | 1 | 2 | 3 | Fluffy | 2020-11-20 | | 2 | 3 | 3 | Fetch | 2019-08-16 | | 3 | 2 | 2 | Scratch | 2018-10-01 | | 4 | 3 | 3 | Wag | 2020-03-15 | | 5 | 1 | 1 | Tweet | 2020-11-28 | | 6 | 3 | 4 | Fluffy | 2020-09-17 | | 7 | 3 | 2 | Bark | NULL | | 8 | 2 | 4 | Meow | NULL | +-------+-----------+---------+---------+------------+
Các ví dụ sau sẽ sử dụng COUNT()
khi truy vấn bảng này.
Ví dụ
Đây là cách đếm các hàng trong bảng trên:
SELECT COUNT(*)
FROM Pets;
Kết quả:
8
Điều này cho chúng ta biết rằng có 8 hàng trong bảng. Chúng tôi biết điều đó vì chúng tôi đã sử dụng ký tự đại diện dấu hoa thị (*
) để chỉ định tất cả các hàng và tất cả các cột.
Đếm một cột cụ thể
Bạn cũng có thể chỉ định một cột để đếm. COUNT()
hàm chỉ đếm không phải NULL
kết quả, vì vậy nếu bạn chỉ định một cột chứa NULL
giá trị, những giá trị đó sẽ không được tính.
Đây là một ví dụ để chứng minh ý tôi muốn nói.
SELECT COUNT(DOB)
FROM Pets;
Kết quả:
6
Trong trường hợp này, Pets
bảng chứa hai NULL
các giá trị trong DOB
cột (hai vật nuôi chưa cung cấp ngày sinh của chúng) và COUNT(DOB)
trả về 6, thay vì 8 khi chúng tôi sử dụng COUNT(*)
.
Lý do COUNT(*)
trong ví dụ trước đã trả về tất cả các hàng, là do hai hàng đó đã làm có dữ liệu trong các cột khác.
Kết quả đã lọc
COUNT()
hàm đếm các hàng được trả về bởi truy vấn. Vì vậy, nếu bạn lọc kết quả, kết quả là COUNT()
sẽ phản ánh điều đó.
SELECT COUNT(*)
FROM Pets
WHERE PetName = 'Fluffy';
Kết quả:
2
Trong trường hợp này, có hai vật nuôi có tên là Fluffy. Do đó, hai hàng sẽ được trả về bởi truy vấn và kết quả của COUNT()
là 2
.
Đếm số cột riêng biệt
Chúng tôi có tùy chọn thêm DISTINCT
từ khóa để chỉ định rằng chỉ các giá trị riêng biệt được trả về (để loại trừ các giá trị trùng lặp):
SELECT
COUNT(PetName) AS "All",
COUNT(DISTINCT PetName) AS "Distinct"
FROM Pets;
Kết quả:
+-----+----------+ | All | Distinct | +-----+----------+ | 8 | 7 | +-----+----------+
Trong trường hợp này, mặc dù có tám PetName
, chỉ có bảy trong số chúng là khác biệt (hai là trùng lặp - chúng tôi có hai vật nuôi được gọi là Fluffy).
HAVING
Mệnh đề
Bạn có thể bao gồm COUNT()
trong nhiều phần của một truy vấn. Nó không chỉ giới hạn ở SELECT
danh sách.
Dưới đây là một ví dụ sử dụng COUNT()
trong cả HAVING
và mệnh đề SELECT
danh sách:
SELECT
PetTypeId,
COUNT(PetTypeId) AS Count
FROM Pets
GROUP BY PetTypeId
HAVING COUNT(PetTypeId) > 2
ORDER BY Count DESC;
Kết quả:
+-------------+---------+ | PetTypeId | Count | |-------------+---------| | 3 | 4 | | 2 | 3 | +-------------+---------+
Xem SQL COUNT()
dành cho Người mới bắt đầu để có giải thích chi tiết hơn về ví dụ này, cũng như ví dụ về cách sử dụng COUNT()
trong một chức năng cửa sổ.