Tìm MIN/MAX trên tập con (subset) của bảng trong MySQL
Sử dụng subquery với LIMIT để giới hạn tập dữ liệu, sau đó áp dụng MIN() và MAX().
Cú pháp
SELECT MIN(yourColumn) AS minAlias, MAX(yourColumn) AS maxAlias FROM (SELECT yourColumn FROM yourTableName LIMIT limitValue) AS subquery;
Ví dụ: Min/Max của 3 hàng đầu tiên
Tạo bảng:
mysql> CREATE TABLE MinAndMaxValueDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Value INT
-> );
Chèn dữ liệu:
mysql> INSERT INTO MinAndMaxValueDemo(Value) VALUES (10), (100), (50), (40);
Dữ liệu đầy đủ:
+----+-------+ | Id | Value | +----+-------+ | 1 | 10 | | 2 | 100 | | 3 | 50 | | 4 | 40 | +----+-------+
Tìm Min/Max của 3 hàng đầu (theo Id):
mysql> SELECT MIN(Value) AS MinimumValue, MAX(Value) AS MaximumValue FROM (SELECT Value FROM MinAndMaxValueDemo LIMIT 3) AS tbl1;
Kết quả (3 hàng đầu: 10, 100, 50 → Min=10, Max=100):
+--------------+--------------+ | MinimumValue | MaximumValue | +--------------+--------------+ | 10 | 100 | +--------------+--------------+
Giải thích
- Subquery
(SELECT Value FROM ... LIMIT 3)lấy 3 hàng đầu - Outer query tính MIN/MAX trên tập con đó
- Alias
tbl1bắt buộc cho derived table
Các biến thể hữu ích
- Có ORDER BY trong subquery:
(SELECT Value FROM t ORDER BY Id DESC LIMIT 3)→ 3 hàng cuối - Có WHERE:
(SELECT Value FROM t WHERE Id > 10 LIMIT 5) - Kết hợp OFFSET:
LIMIT 5 OFFSET 10(hàng 11-15)
Lưu ý hiệu năng
- Subquery LIMIT thường được tối ưu tốt
- Nếu cần MIN/MAX trên partition/window: dùng Window Function (MySQL 8.0+)
MIN()/MAX()có thể dùng index nếu có điều kiện WHERE phù hợp