Làm cách nào để đếm dữ liệu trong mysql?

Không phải ai cũng nhận ra điều này, nhưng hàm COUNT sẽ chỉ bao gồm các bản ghi trong bộ đếm mà giá trị của biểu thức trong COUNT(biểu thức) là NOT NULL. Khi biểu thức chứa giá trị NULL, nó không được bao gồm trong phép tính COUNT

Hãy xem một ví dụ về hàm COUNT minh họa cách các giá trị NULL được đánh giá bởi hàm COUNT

Ví dụ: nếu bạn có bảng sau đây được gọi là nhà cung cấp

nhà cung cấp_idsupplier_namestate1IBMCA2Microsoft 3NVIDIA

Và nếu bạn chạy câu lệnh SELECT sau sử dụng hàm COUNT

SELECT COUNT(supplier_id)
FROM suppliers;

Result: 3

Ví dụ COUNT này sẽ trả về 3 vì tất cả các giá trị supply_id trong tập hợp kết quả của truy vấn đều KHÔNG NULL

Tuy nhiên, nếu bạn chạy câu lệnh SELECT tiếp theo sử dụng hàm COUNT

SELECT COUNT(state) 
FROM suppliers;

Result: 1

Ví dụ COUNT này sẽ chỉ trả về 1, vì chỉ có một giá trị trạng thái trong tập kết quả của truy vấn là NOT NULL. Đó sẽ là hàng đầu tiên có trạng thái = 'CA'. Đây là hàng duy nhất được bao gồm trong phép tính hàm COUNT

Áp dụng cho

Hàm COUNT có thể được sử dụng trong các phiên bản MySQL sau

  • mysql 5. 7, MySQL5. 6, MySQL5. 5, MySQL5. 1, MySQL5. 0, MySQL4. 1, MySQL4. 0, Mysql 3. 23

Ví dụ - Với biểu thức đơn

Hãy xem một số ví dụ về hàm COUNT trong MySQL và khám phá cách sử dụng hàm COUNT trong MySQL

Ví dụ, bạn có thể muốn biết có bao nhiêu nhân viên có mức lương trên $75,000/năm

SELECT COUNT(*) AS "Number of employees"
FROM employees
WHERE salary > 75000;

Trong ví dụ về hàm COUNT này, chúng tôi đã đặt bí danh cho biểu thức COUNT(*) là "Số lượng nhân viên". Do đó, "Số lượng nhân viên" sẽ hiển thị dưới dạng tên trường khi tập kết quả được trả về

Ví dụ - Sử dụng DISTINCT

Bạn có thể sử dụng mệnh đề DISTINCT trong hàm COUNT. Ví dụ: câu lệnh SQL bên dưới trả về số phòng ban duy nhất có ít nhất một nhân viên kiếm được hơn 55.000 đô la/năm

SELECT COUNT(DISTINCT department) AS "Unique departments"
FROM employees
WHERE salary > 55000;

Một lần nữa, trường COUNT(Bộ phận DISTINCT) có bí danh là "Các bộ phận duy nhất". Đây là tên trường sẽ hiển thị trong tập hợp kết quả

Ví dụ - Sử dụng GROUP BY

Trong một số trường hợp, bạn sẽ được yêu cầu sử dụng mệnh đề GROUP BY với hàm COUNT

Ví dụ: bạn cũng có thể sử dụng hàm COUNT để trả về tên của bộ phận và số lượng nhân viên (trong bộ phận được liên kết) ở trạng thái 'CA'

SELECT department, COUNT(*) AS "Number of employees"
FROM employees
WHERE state = 'CA'
GROUP BY department;

Bởi vì bạn đã liệt kê một cột trong câu lệnh SELECT không được đóng gói trong hàm COUNT, nên bạn phải sử dụng mệnh đề GROUP BY. Do đó, trường bộ phận phải được liệt kê trong phần NHÓM THEO

Có một số cách để lấy số lượng hàng trong MySQL. Một số sản phẩm quản lý cơ sở dữ liệu cung cấp số liệu thống kê cơ sở dữ liệu như kích thước bảng, nhưng nó cũng có thể được thực hiện bằng SQL thẳng. Trong mẹo hôm nay, chúng ta sẽ sử dụng hàm gốc COUNT() để truy xuất số hàng trong một bảng hoặc dạng xem trong cơ sở dữ liệu MySQL. Trong phần 2, chúng ta sẽ tìm hiểu cách lấy số lượng hàng từ nhiều bảng hoặc thậm chí từ tất cả các bảng trong cơ sở dữ liệu

Có thể bạn đã biết hàm COUNT() trả về số hàng trong bảng. Nhưng còn nhiều điều hơn thế nữa, vì hàm COUNT() có thể được sử dụng để đếm tất cả các hàng trong một bảng hoặc chỉ những hàng khớp với một điều kiện cụ thể. Bí mật nằm ở chữ ký hàm, trong đó có một số dạng. COUNT(*), COUNT(biểu thức) và COUNT(biểu thức DISTINCT)

Trong mỗi trường hợp, hàm COUNT() trả về BIGINT chứa số lượng hàng phù hợp hoặc bằng 0 nếu không tìm thấy

Để đếm tất cả các hàng trong một bảng, cho dù chúng có chứa giá trị NULL hay không, hãy sử dụng COUNT(*). Dạng đó của hàm COUNT() về cơ bản trả về số hàng trong tập kết quả được trả về bởi câu lệnh SELECT

CHỌN ĐẾM (*) TỪ các thành phố;

Một câu lệnh giống như câu lệnh ở trên gọi hàm COUNT(*) mà không có mệnh đề WHERE hoặc các cột bổ sung, sẽ hoạt động rất nhanh trên các bảng MyISAM vì số lượng hàng được lưu trữ trong cột table_rows trong bảng bảng của cơ sở dữ liệu lược đồ thông tin

Đối với các công cụ lưu trữ giao dịch như InnoDB, việc lưu trữ số lượng hàng chính xác là một vấn đề vì InnoDB không giữ số lượng hàng nội bộ trong một bảng. Nếu đúng như vậy, các giao dịch đồng thời có thể “thấy” số lượng hàng khác nhau cùng một lúc. Do đó, các câu lệnh SELECT COUNT(*) chỉ đếm các hàng hiển thị cho giao dịch hiện tại. Điều đó có nghĩa là việc chạy truy vấn bằng COUNT(*) trong khi khối lượng công việc lớn có thể dẫn đến các con số hơi không chính xác

Không chuyển gì cho COUNT() thực thi phiên bản COUNT(expr) của hàm, nhưng sans tham số. Gọi COUNT() theo cách đó chỉ trả về các hàng không bao gồm các giá trị NULL. Ví dụ: giả sử rằng chúng tôi có một bảng đơn giản có tên code_values

code_values
+-------+
. mã số.
+-------+
. 1.
+-------+
.        .
+-------+
.        .
+-------+
. 4.
+-------+

Chọn COUNT() từ bảng sẽ trả về 2, mặc dù có 4 hàng

CHỌN COUNT(*) TỪ code_values;

+---------+
. ĐẾM().
+---------+
. 2.
+---------+

Lưu ý rằng phiên bản này của hàm COUNT() hiếm khi được sử dụng vì các hàng NULL không phải là vấn đề trong cơ sở dữ liệu chuẩn hóa, một điều kiện chỉ có thể xảy ra nếu bảng không có khóa chính. Trong hầu hết các trường hợp, COUNT(*) sẽ hoạt động bình thường

Tất nhiên, COUNT(expr) chấp nhận các biểu thức thích hợp. Đây là một truy vấn khác tìm nạp các hàng NULL và không NULL giống nhau

CHỌN ĐẾM (IFNULL (mã, 1)) TỪ code_values;

Đếm các giá trị khác null

Phiên bản COUNT(expr) của hàm COUNT cũng chấp nhận các tên cột riêng lẻ, kết quả là COUNT(tên_cột) sẽ trả về số lượng bản ghi trong đó tên_cột không phải là NULL. Do đó, truy vấn CHỌN sau sẽ tìm nạp số lượng hàng trong đó cột mô tả chứa giá trị không NULL

CHỌN ĐẾM (mô tả) TỪ các vật dụng;

Trong Phần 2, chúng ta sẽ tìm hiểu cách sử dụng chữ ký COUNT(DISTINCT expression) cũng như cách lấy số lượng hàng từ nhiều bảng