Trong SQL, MIN()
hàm là một hàm tổng hợp trả về giá trị nhỏ nhất trong một biểu thức nhất định.
Dưới đây là một số ví dụ cơ bản để chứng minh cách hoạt động của nó.
Bảng mẫu
Giả sử chúng ta có bảng sau:
SELECT * FROM Products;
Kết quả:
+-------------+------------+---------------------------------+----------------+-----------------------------------------+ | ProductId | VendorId | ProductName | ProductPrice | ProductDescription | |-------------+------------+---------------------------------+----------------+-----------------------------------------| | 1 | 1001 | Left handed screwdriver | 25.99 | Purple. Includes left handed carry box. | | 2 | 1001 | Long Weight (blue) | 14.75 | Includes a long wait. | | 3 | 1001 | Long Weight (green) | 11.99 | Approximate 30 minute waiting period. | | 4 | 1002 | Sledge Hammer | 33.49 | Wooden handle. Free wine glasses. | | 5 | 1003 | Chainsaw | 245.00 | Orange. Includes spare fingers. | | 6 | 1003 | Straw Dog Box | NULL | Tied with vines. Very chewable. | | 7 | 1004 | Bottomless Coffee Mugs (4 Pack) | 9.99 | Brown ceramic with solid handle. | +-------------+------------+---------------------------------+----------------+-----------------------------------------+
Ví dụ
Dưới đây là một ví dụ đơn giản để chứng minh.
SELECT MIN(ProductPrice)
FROM Products;
Kết quả:
+--------------------+ | (No column name) | |--------------------| | 9.99 | +--------------------+
Trong trường hợp này, thông tin giá được lưu trữ trong ProductPrice
và do đó chúng tôi chuyển nó làm đối số cho MIN()
hàm, sau đó sẽ tính toán và trả về kết quả.
Sử dụng bí danh cột
Bạn sẽ nhận thấy rằng các kết quả trước đó không bao gồm tên cột. Điều này được mong đợi, vì MIN()
hàm không trả về bất kỳ cột nào. Bạn có thể dễ dàng cung cấp tên cột bằng cách gán bí danh.
SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products;
Kết quả:
+----------------+ | MinimumPrice | |----------------| | 9.99 | +----------------+
Kết quả được lọc
MIN()
hàm hoạt động trên các hàng được trả về bởi truy vấn. Vì vậy, nếu bạn lọc kết quả, kết quả là MIN()
sẽ phản ánh điều đó.
SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products
WHERE VendorId = 1001;
Kết quả:
+----------------+ | MinimumPrice | |----------------| | 11.99 | +----------------+
Trong trường hợp này, 11,99 là giá tối thiểu của tất cả các sản phẩm được cung cấp bởi nhà cung cấp được chỉ định.
NULL
Giá trị
MIN()
hàm bỏ qua bất kỳ NULL
nào các giá trị. Trong bảng mẫu của chúng tôi ở trên, số sản phẩm 6
đã có NULL
trong ProductPrice
của nó nhưng cột đó đã bị bỏ qua trong MIN()
của chúng tôi ví dụ.
Tùy thuộc vào DBMS và cài đặt của bạn, bạn có thể thấy hoặc không thấy cảnh báo rằng NULL
các giá trị đã bị loại bỏ trong tập kết quả.
Dưới đây là một ví dụ về những gì bạn có thể thấy:
SELECT MIN(ProductPrice) AS MinimumPrice
FROM Products;
Kết quả:
+----------------+ | MinimumPrice | |----------------| | 9.99 | +----------------+ Warning: Null value is eliminated by an aggregate or other SET operation.
Tất cả những gì điều này cho chúng ta biết là cột chứa ít nhất một NULL
và nó đã bị bỏ qua khi tính toán kết quả.
Dữ liệu ngày / giờ
Bạn có thể sử dụng MIN()
về giá trị ngày / giờ.
Giả sử chúng ta có bảng sau:
SELECT PetName, DOB
FROM Pets;
Kết quả:
+-----------+------------+ | PetName | DOB | |-----------+------------| | Fluffy | 2020-11-20 | | Fetch | 2019-08-16 | | Scratch | 2018-10-01 | | Wag | 2020-03-15 | | Tweet | 2020-11-28 | | Fluffy | 2020-09-17 | | Bark | NULL | | Meow | NULL | +-----------+------------+
Chúng ta có thể sử dụng MIN()
để tìm ngày sinh tối thiểu (DOB
).
SELECT MIN(DOB) AS MinDOB
FROM Pets;
Kết quả:
+------------+ | MinDOB | |------------| | 2018-10-01 | +------------+
Một lần nữa, nó bỏ qua NULL
giá trị.
Dữ liệu ký tự
Khi được sử dụng với các cột dữ liệu ký tự, MIN()
tìm giá trị thấp nhất trong trình tự sắp xếp.
Ví dụ:
SELECT MIN(ProductName) AS MinimumProductName
FROM Products;
Kết quả:
+---------------------------------+ | MinimumProductName | |---------------------------------| | Bottomless Coffee Mugs (4 Pack) | +---------------------------------+
DISTINCT
Từ khóa
DBMS của bạn có thể cho phép DISTINCT
từ khóa được sử dụng với MIN()
hàm số. Nếu vậy, điều này có thể là để tuân thủ tiêu chuẩn ISO SQL.
Do đó, bạn có thể làm được điều này:
SELECT MIN(DISTINCT ProductPrice) AS MinimumPrice
FROM Products;
Kết quả:
+----------------+ | MinimumPrice | |----------------| | 9.99 | +----------------+
Nhưng nó sẽ không ảnh hưởng đến kết quả.
DISTINCT
từ khóa có thể rất hữu ích khi được sử dụng với các ngữ cảnh khác (ví dụ:với COUNT()
hàm), nhưng nó không có nghĩa khi được sử dụng với MIN()
. DISTINCT
từ khóa loại bỏ các bản sao, nhưng trong trường hợp MIN()
nó sẽ không tạo ra bất kỳ sự khác biệt nào vì MIN()
trả về cùng một kết quả bất kể có bao nhiêu hàng có cùng giá trị nhỏ nhất.
Chức năng cửa sổ
Tùy thuộc vào DBMS của bạn, bạn có thể sử dụng OVER
mệnh đề với MIN()
của bạn chức năng tạo một chức năng cửa sổ.
Một hàm cửa sổ thực hiện một hoạt động giống như tổng hợp trên một tập hợp các hàng truy vấn. Nó tạo ra một kết quả cho mỗi hàng truy vấn. Điều này trái ngược với hoạt động tổng hợp, nhóm các hàng truy vấn thành một hàng kết quả duy nhất.
Dưới đây là một ví dụ để chứng minh khái niệm này.
Chúng tôi đã thấy Products
bàn. Cơ sở dữ liệu của chúng tôi cũng có Customers
và nó chứa dữ liệu sau:
+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+ | CustomerId | CustomerName | PostalAddress | City | StateProvince | ZipCode | Country | Phone | |--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+ | 1001 | Palm Pantry | 20 Esplanade | Townsville | QLD | 2040 | AUS | (308) 555-0100 | | 1002 | Tall Poppy | 12 Main Road | Columbus | OH | 43333 | USA | (310) 657-0134 | | 1003 | Crazy Critters | 10 Infinite Loops | Cairns | QLD | 4870 | AUS | (418) 555-0143 | | 1004 | Oops Media | 4 Beachside Drive | Perth | WA | 1234 | AUS | (405) 443-5987 | | 1005 | Strange Names Inc. | 789 George Street | Sydney | NSW | 2000 | AUD | (318) 777-0177 | | 1006 | Hi-Five Solutionists | 5 High Street | Highlands | HI | 1254 | AUS | (415) 413-5182 | +--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
Chúng tôi có thể truy xuất dữ liệu từ các bảng này và trình bày chúng dưới dạng một tập hợp kết quả bằng cách sử dụng phép nối.
Chúng tôi cũng có thể sử dụng MIN()
chức năng với OVER
để áp dụng một hàm cửa sổ cho dữ liệu.
SELECT
v.VendorName,
p.ProductName,
p.ProductPrice,
MIN(ProductPrice) OVER (PARTITION BY v.VendorName) AS "Minimum Price For This Vendor"
FROM Products p
INNER JOIN Vendors v
ON v.VendorId = p.VendorId
ORDER BY VendorName, ProductPrice, "Minimum Price For This Vendor";
Kết quả:
+---------------+---------------------------------+----------------+---------------------------------+ | VendorName | ProductName | ProductPrice | Minimum Price For This Vendor | |---------------+---------------------------------+----------------+---------------------------------| | Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99 | 9.99 | | Mars Supplies | Long Weight (green) | 11.99 | 11.99 | | Mars Supplies | Long Weight (blue) | 14.75 | 11.99 | | Mars Supplies | Left handed screwdriver | 25.99 | 11.99 | | Pedal Medals | Straw Dog Box | NULL | 245.00 | | Pedal Medals | Chainsaw | 245.00 | 245.00 | | Randy Roofers | Sledge Hammer | 33.49 | 33.49 | +---------------+---------------------------------+----------------+---------------------------------+
Trong trường hợp này, chúng tôi đã sử dụng OVER
mệnh đề với MIN()
của chúng tôi chức năng phân vùng kết quả theo tên nhà cung cấp.
Bằng cách này, chúng tôi có thể trả lại thông tin giá cho từng sản phẩm, cũng như giá tối thiểu cho tất cả các sản phẩm từ nhà cung cấp nhất định đó. Giá tối thiểu này thay đổi khi nhà cung cấp thay đổi (trừ khi nhiều nhà cung cấp có cùng mức giá tối thiểu), nhưng không đổi đối với tất cả các sản phẩm từ cùng một nhà cung cấp.
Khái niệm này cũng có thể được áp dụng cho các hàm tổng hợp khác trong SQL, chẳng hạn như SUM()
, AVG()
, MAX()
và COUNT()
.