CodeGym /Các khóa học /SQL SELF /Giá trị Nhỏ nhất và Lớn nhất: MIN() và MAX()

Giá trị Nhỏ nhất và Lớn nhất: MIN() và MAX()

SQL SELF
Mức độ, Bài học
Có sẵn

Cùng lặn vào thế giới của cực trị trong dữ liệu — tìm giá trị nhỏ nhất và lớn nhất. Đừng lo, SQL không bắt bạn học gì quá mới đâu, nhưng tụi mình sẽ biết cách tìm giá trị lớn nhất và nhỏ nhất trong bảng. Mấy hàm này dùng khắp nơi luôn: từ phân tích rating phim trên IMDb tới tính nhiệt độ thấp nhất trên Sao Hỏa.

MIN() và MAX() là các hàm tổng hợp trả về giá trị nhỏ nhất và lớn nhất từ một tập dữ liệu. Chúng hoạt động như những thợ săn cực trị: MIN() tìm phần tử nhỏ nhất, còn MAX() thì ngược lại, tìm phần tử lớn nhất. Không chỉ dùng cho số đâu nhé: bạn còn có thể tìm chuỗi nhỏ nhất/lớn nhất hoặc ngày tháng nữa.

-- Dạng tổng quát của hàm MIN và MAX
SELECT 
    MIN(column_name) AS min_value,
    MAX(column_name) AS max_value
FROM table_name;

Dễ ẹc luôn! Giờ thì xem thử mấy phép màu này hoạt động thế nào trong các trường hợp khác nhau nha.

Cú pháp và ví dụ cơ bản

Dữ liệu số

Giả sử tụi mình có bảng employees, trong đó có cột lương nhân viên (salary).

Tụi mình muốn biết lương nhỏ nhất và lớn nhất là bao nhiêu.

Bảng employees

id name salary
1 Anna Song 45000
2 Otto Art 30000
3 Maria Chi 120000
4 Alex Lin 90000
5 Eva Tan 60000
-- Ví dụ cho dữ liệu số
SELECT 
    MIN(salary) AS min_salary,
    MAX(salary) AS max_salary
FROM employees;

Kết quả

min_salary max_salary
30000 120000

Dữ liệu văn bản

Bạn có thể dùng MIN() và MAX() với dữ liệu dạng text luôn nha.

Chúng so sánh theo thứ tự chữ cái (đúng rồi, chữ cái cũng có "nhỏ nhất" và "lớn nhất" đó).

Giả sử có bảng students, trong cột name lưu tên sinh viên.

Bảng students

id name
1 Anna
2 Otto
3 Maria
4 Ben
5 Zoe
-- Ví dụ cho dữ liệu text
SELECT 
    MIN(name) AS first_name_in_order,
    MAX(name) AS last_name_in_order
FROM students;

Kết quả

first_name_in_order last_name_in_order
Anna Zoe

Ngày tháng và thời gian
Tìm ngày sớm nhất và muộn nhất trong bảng events.

Bảng events

id event_name event_date
1 New Year Party 2023-01-01
2 Summer Fest 2023-06-15
3 Halloween Bash 2023-10-31
4 Year End Gala 2023-12-31
-- Ví dụ cho ngày tháng
SELECT 
    MIN(event_date) AS earliest_date,
    MAX(event_date) AS latest_date
FROM events;

Kết quả

earliest_date latest_date
2023-01-01 2023-12-31

Dùng MIN() và MAX() với bảng có giá trị NULL

Nếu trong cột có giá trị NULL, bạn cứ yên tâm: SQL sẽ bỏ qua chúng khi tính toán.

Nghĩa là MIN() và MAX() chỉ làm việc với giá trị "bình thường" thôi.

Bảng employees_with_null

id name salary
1 Otto 30000
2 Maria NULL
3 Anna 120000
4 John NULL
-- Bảng có NULL
SELECT 
    MIN(salary) AS min_salary,
    MAX(salary) AS max_salary
FROM employees_with_null;

Nếu trong cột salary có dòng NULL, chúng sẽ bị bỏ qua thôi.

min_salary max_salary
30000 120000

Nhưng nếu TOÀN BỘ cột đều là NULL, kết quả sẽ là NULL.

Ví dụ dùng MIN() và MAX() trong thực tế

Xác định nhân viên lớn tuổi nhất và trẻ nhất

Bảng employees

id name birth_date
1 Otto 1980-05-10
2 Maria 1990-11-20
3 Anna 1975-03-15
4 John 2000-08-01

Trong bảng employees có trường birth_date lưu ngày sinh nhân viên. Xác định ai lớn tuổi nhất và ai trẻ nhất nhé.

SELECT
    MIN(birth_date) AS oldest_employee,
    MAX(birth_date) AS youngest_employee
FROM employees;

Kết quả:

oldest_employee youngest_employee
1975-03-15 2000-08-01

Phân tích doanh số

id amount
1 150.00
2 75.50
3 200.00
4 120.00
5 500.00
6 90.00

Trong bảng sales có trường amount lưu số tiền bán hàng. Tìm giá trị nhỏ nhất và lớn nhất của đơn hàng nhé.

SELECT
    MIN(amount) AS smallest_sale,
    MAX(amount) AS largest_sale
FROM sales;

Kết quả truy vấn

smallest_sale largest_sale
75.50 500.00

Tìm đơn hàng đầu tiên và cuối cùng

Nếu bạn có bảng orders với trường order_date, có thể dễ dàng biết ngày đặt hàng đầu tiên và cuối cùng.

Bảng gốc orders

order_id customer_id order_date amount
101 1 2023-01-15 10:23:00 250.00
102 2 2023-02-10 14:45:00 150.00
103 3 2023-01-05 09:10:00 300.00
104 1 2023-03-22 16:30:00 500.00
105 4 2023-01-25 11:00:00 120.00
SELECT
    MIN(order_date) AS first_order,
    MAX(order_date) AS last_order
FROM orders;

Kết quả truy vấn:

first_order last_order
2023-01-05 09:10:00 2023-03-22 16:30:00

Đặc điểm của MIN() và MAX()

So sánh chuỗi: khi làm việc với chuỗi, MIN() và MAX() so sánh theo thứ tự chữ cái.

Làm việc với NULL: NULL sẽ bị bỏ qua nếu trong cột còn giá trị khác. Nhưng nếu tất cả đều NULL, kết quả là NULL.

So sánh ngày tháng: SQL xét cả năm, tháng, ngày, giờ, phút luôn nha.

2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Tìm số lượng nhỏ nhất và lớn nhất
Tìm số lượng nhỏ nhất và lớn nhất
2
Nhiệm vụ
SQL SELF, mức độ, bài học
Đã khóa
Tìm ngày sinh sớm nhất và muộn nhất
Tìm ngày sinh sớm nhất và muộn nhất
1
Khảo sát/đố vui
, cấp độ , bài học
Không có sẵn
Tổng hợp dữ liệu
Tổng hợp dữ liệu
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION