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

Lấy tên nhân viên theo công ty cụ thể dùng GROUP BY MySQL

Bài toán

Liệt kê tên nhân viên duy nhất (DISTINCT) làm việc tại một công ty cụ thể.

Ví dụ

Tạo bảng (sửa typo trong nguồn: archar → VARCHAR, thiếu dấu cách):

CREATE TABLE DemoTable642 (
    EmployeeId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    EmployeeName VARCHAR(100),
    EmployeeCompanyName VARCHAR(100)
);
INSERT INTO DemoTable642(EmployeeName, EmployeeCompanyName) VALUES
('John', 'Google'), ('Carol', 'Microsoft'), ('John', 'Amazon'),
('Carol', 'Google'), ('John', 'Flipkart');

Dữ liệu: John làm tại 3 công ty, Carol làm tại 2 công ty (Google, Microsoft).

Truy vấn nhân viên tại Google:

SELECT EmployeeName
FROM DemoTable642
WHERE EmployeeCompanyName = 'Google'
GROUP BY EmployeeName;

Kết quả:

+--------------+
| EmployeeName |
+--------------+
| John         |
| Carol        |
+--------------+

Giải thích

  • WHERE lọc công ty Google trước.
  • GROUP BY EmployeeName gom trùng tên (John xuất hiện 1 lần dù có thể nhiều record).
  • Tương đương SELECT DISTINCT EmployeeName ... WHERE ....

Mở rộng: Thống kê số công ty mỗi nhân viên

SELECT EmployeeName, COUNT(DISTINCT EmployeeCompanyName) AS company_count
FROM DemoTable642
GROUP BY EmployeeName
ORDER BY company_count DESC;

Kết quả: John (3), Carol (2).

Lưu ý GROUP BY

  • MySQL cho phép SELECT cột không trong GROUP BY (non-aggregated) nhưng giá trị không xác định (chế độ ONLY_FULL_GROUP_BY báo lỗi).
  • Luôn liệt kê đầy đủ cột non-aggregated trong GROUP BY.
  • GROUP BY ngầm sắp xếp (implicit sort) trong MySQL cũ, MySQL 8.0+ không đảm bảo → luôn dùng ORDER BY tường minh.