Để thêm cột hiển thị số lượng bản ghi cùng LastName cho mỗi hàng, bạn dùng JOIN với subquery GROUP BY LastName đếm số lượng.
Ví dụ minh họa
Tạo bảng:
mysql> create table DemoTable (
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
FirstName varchar(100),
LastName varchar(100)
);
Chèn dữ liệu (Miller 2 lần, Doe 1 lần):
mysql> insert into DemoTable(FirstName,LastName) values('David','Miller');
mysql> insert into DemoTable(FirstName,LastName) values('Carol','Miller');
mysql> insert into DemoTable(FirstName,LastName) values('John','Doe');
Hiển thị dữ liệu:
mysql> select * from DemoTable;
Kết quả:
+----+-----------+----------+ | Id | FirstName | LastName | +----+-----------+----------+ | 1 | David | Miller | | 2 | Carol | Miller | | 3 | John | Doe | +----+-----------+----------+
Truy vấn JOIN subquery COUNT theo LastName
mysql> select Id, FirstName, LastName, Count from DemoTable tbl1 JOIN (select count(*) as Count, LastName from DemoTable GROUP BY LastName) tbl2 using(LastName);
Kết quả:
+----+-----------+----------+-------+ | Id | FirstName | LastName | Count | +----+-----------+----------+-------+ | 1 | David | Miller | 2 | | 2 | Carol | Miller | 2 | | 3 | John | Doe | 1 | +----+-----------+----------+-------+
Giải thích:
- Subquery
tbl2:SELECT COUNT(*) as Count, LastName FROM DemoTable GROUP BY LastName→ bảng tạm: (Miller,2), (Doe,1) JOIN ... USING(LastName): Ghép tbl1 với tbl2 theo LastName- Mỗi hàng tbl1 nhận thêm cột Count từ tbl2 tương ứng
Cách hiện đại (MySQL 8.0+): Dùng window function: COUNT(*) OVER (PARTITION BY LastName) as Count - không cần JOIN, hiệu suất tốt hơn, cú pháp gọn hơn.