Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Thêm cột COUNT theo nhóm LastName vào kết quả truy vấn MySQL

Để 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.