Bạn có thể sử dụng mệnh đề GROUP BY kết hợp với hàm COUNT() để thực hiện việc này. Cú pháp cơ bản như sau:
SELECT cot_cua_ban1, cot_cua_ban2, ..., COUNT(*) AS ten_biet_danh FROM ten_bang_cua_ban GROUP BY cot_cua_ban1, cot_cua_ban2;
Ví dụ minh họa
Đầu tiên, tạo một bảng mẫu:
mysql> CREATE TABLE NhomVaDemTheoNgay (
-> Id INT NOT NULL AUTO_INCREMENT,
-> NgayDi DATE,
-> ShopId INT,
-> PRIMARY KEY(Id)
-> );
Chèn một số dữ liệu mẫu:
mysql> INSERT INTO NhomVaDemTheoNgay(NgayDi, ShopId) VALUES('2019-01-31', 10);
mysql> INSERT INTO NhomVaDemTheoNgay(NgayDi, ShopId) VALUES('2019-02-01', 15);
mysql> INSERT INTO NhomVaDemTheoNgay(NgayDi, ShopId) VALUES('2019-01-31', 10);
mysql> INSERT INTO NhomVaDemTheoNgay(NgayDi, ShopId) VALUES('2019-02-01', 15);
mysql> INSERT INTO NhomVaDemTheoNgay(NgayDi, ShopId) VALUES('2019-03-23', 20);
mysql> INSERT INTO NhomVaDemTheoNgay(NgayDi, ShopId) VALUES('2019-04-21', 25);
mysql> INSERT INTO NhomVaDemTheoNgay(NgayDi, ShopId) VALUES('2019-03-13', 20);
mysql> INSERT INTO NhomVaDemTheoNgay(NgayDi, ShopId) VALUES('2019-04-06', 25);
Hiển thị tất cả bản ghi:
mysql> SELECT * FROM NhomVaDemTheoNgay;
Kết quả:
+----+------------+--------+ | Id | NgayDi | ShopId | +----+------------+--------+ | 1 | 2019-01-31 | 10 | | 2 | 2019-02-01 | 15 | | 3 | 2019-01-31 | 10 | | 4 | 2019-02-01 | 15 | | 5 | 2019-03-23 | 20 | | 6 | 2019-04-21 | 25 | | 7 | 2019-03-13 | 20 | | 8 | 2019-04-06 | 25 | +----+------------+--------+
Truy vấn GROUP BY và COUNT theo ngày
mysql> SELECT NgayDi, ShopId, COUNT(*) AS TONG_SO_CHUYEN
-> FROM NhomVaDemTheoNgay
-> GROUP BY NgayDi, ShopId;
Kết quả:
+------------+--------+-------------+ | NgayDi | ShopId | TONG_SO_CHUYEN | +------------+--------+-------------+ | 2019-01-31 | 10 | 2 | | 2019-02-01 | 15 | 2 | | 2019-03-23 | 20 | 1 | | 2019-04-21 | 25 | 1 | | 2019-03-13 | 20 | 1 | | 2019-04-06 | 25 | 1 | +------------+--------+-------------+
Trong ví dụ này, dữ liệu được nhóm theo cả NgayDi và ShopId, sau đó đếm số lần xuất hiện của mỗi tổ hợp.