Bạn cần sử dụng CHỨC NĂNG AGGREGATE :
Các hàm tổng hợp tính toán một kết quả duy nhất từ một tập hợp các giá trị đầu vào.
SELECT col2, MIN(col3) AS col3, MIN(col1) AS col1
FROM the_table
GROUP BY col2;
Trong SQL chuẩn, truy vấn bao gồm mệnh đề GROUP BY không thể tham chiếu đến các cột không được tổng hợp trong danh sách chọn không có tên trong mệnh đềGROUP BY
và:
MySQL mở rộng việc sử dụng GROUP BY để danh sách chọn có thể tham chiếu đến các cột không được tổng hợp không có tên trong mệnh đề GROUP BY. Điều này có nghĩa là truy vấn trước đó là hợp pháp trong MySQL. Bạn có thể sử dụng tính năng này để có được hiệu suất tốt hơn bằng cách tránh phân loại và nhóm cột không cần thiết. Tuy nhiên, điều này chủ yếu hữu ích khi tất cả các giá trị trong mỗi cột không được tổng hợp không có tên trong GROUP BY là giống nhau cho mỗi nhóm. Máy chủ có thể tự do chọn bất kỳ giá trị nào từ mỗi nhóm, vì vậy trừ khi chúng giống nhau, các giá trị được chọn là không xác định
Vì vậy, với phiên bản MySQL không có hàm tổng hợp rõ ràng, bạn có thể kết thúc với các giá trị không xác định. Tôi thực sự khuyên bạn nên sử dụng hàm tổng hợp cụ thể.
CHỈNH SỬA:
SQL92 trở về trước không cho phép các truy vấn mà danh sách chọn, điều kiện HAVING hoặc danh sách ORDER BY tham chiếu đến các cột không được tổng hợp không có tên trong mệnh đề GROUP BY.
SQL99 trở lên cho phép các tập hợp như vậy cho mỗi tính năng tùy chọn T301 nếu chúng phụ thuộc về mặt chức năng vào các cột GROUP BY: Nếu một mối quan hệ như vậy tồn tại giữa tên và custid, thì truy vấn là hợp pháp. Đây sẽ là trường hợp, chẳng hạn, custid là khóa chính của khách hàng.
Ví dụ:
SELECT o.custid, c.name, MAX(o.payment)
FROM orders AS o
JOIN customers AS c
ON o.custid = c.custid
GROUP BY o.custid;