Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MIN () - Tìm giá trị nhỏ nhất trong một cột trong MySQL

MySQL MIN() hàm là một hàm tổng hợp trả về giá trị nhỏ nhất từ ​​một biểu thức.

Thông thường, biểu thức sẽ là một dải giá trị được trả về dưới dạng các hàng riêng biệt trong một cột và bạn có thể sử dụng hàm này để tìm giá trị nhỏ nhất từ ​​các hàng được trả về. Nếu không có hàng nào phù hợp, MIN() trả về NULL .

Ví dụ:bạn có thể sử dụng chức năng này để tìm ra thành phố nào có dân số ít nhất trong danh sách các thành phố.

Cú pháp

Cú pháp của MIN() như sau:

MIN([DISTINCT] expr) [over_clause]

Ở đâu expr là biểu thức mà bạn muốn có giá trị nhỏ nhất.

over_clause là một mệnh đề tùy chọn hoạt động với các chức năng cửa sổ. Lưu ý rằng over_clause chỉ có thể được sử dụng nếu bạn không sử dụng DISTINCT từ khóa.

(Tùy chọn) DISTINCT từ khóa có thể được sử dụng để loại bỏ các giá trị trùng lặp.

Ví dụ cơ bản

Đầu tiên, đây là dữ liệu thô mà chúng tôi sẽ sử dụng trong ví dụ này:

USE world;
SELECT Name, Population
FROM City
WHERE CountryCode = 'THA';

Kết quả:

+-------------------+------------+
| Name              | Population |
+-------------------+------------+
| Bangkok           |    6320174 |
| Nonthaburi        |     292100 |
| Nakhon Ratchasima |     181400 |
| Chiang Mai        |     171100 |
| Udon Thani        |     158100 |
| Hat Yai           |     148632 |
| Khon Kaen         |     126500 |
| Pak Kret          |     126055 |
| Nakhon Sawan      |     123800 |
| Ubon Ratchathani  |     116300 |
| Songkhla          |      94900 |
| Nakhon Pathom     |      94100 |
+-------------------+------------+

Chúng ta có thể sử dụng MIN() hàm để tìm thành phố có dân số nhỏ nhất (tức là hàng có giá trị nhỏ nhất trong cột dân số của nó).

USE world;
SELECT MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'THA';

Kết quả:

+---------------+
| Minimum Value |
+---------------+
|         94100 |
+---------------+

Mệnh đề GROUP BY

Chúng ta có thể sử dụng GROUP BY mệnh đề liệt kê từng quận, cùng với dân số của thành phố nhỏ nhất của quận đó (theo dân số):

USE world;
SELECT District, MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District;

Kết quả:

+-----------------+---------------+
| District        | Minimum Value |
+-----------------+---------------+
| New South Wales |        219761 |
| Victoria        |        125382 |
| Queensland      |         92273 |
| West Australia  |       1096829 |
| South Australia |        978100 |
| Capital Region  |        322723 |
| Tasmania        |        126118 |
+-----------------+---------------+

Mệnh đề ORDER BY

Chúng tôi cũng có thể sử dụng ORDER BY mệnh đề để chỉ định một cột để sắp xếp theo:

USE world;
SELECT District, MIN(Population) AS 'Minimum Value'
FROM City
WHERE CountryCode = 'AUS'
GROUP BY District
ORDER BY `Minimum Value` ASC;

Kết quả:

+-----------------+---------------+
| District        | Minimum Value |
+-----------------+---------------+
| Queensland      |         92273 |
| Victoria        |        125382 |
| Tasmania        |        126118 |
| New South Wales |        219761 |
| Capital Region  |        322723 |
| South Australia |        978100 |
| West Australia  |       1096829 |
+-----------------+---------------+

Điều này sắp xếp các kết quả theo thứ tự tăng dần, trong đó liệt kê giá trị nhỏ nhất trước tiên.

Lưu ý rằng, khi sắp xếp theo bí danh gồm nhiều từ (như `Minimum Value` ), bạn cần sử dụng ký tự hình nền (` ) thay vì dấu nháy đơn (' ) để bao quanh hai từ.

Tìm độ dài ký tự tối thiểu

MIN() hàm không chỉ giới hạn ở các cột có dữ liệu số. Bạn cũng có thể kết hợp MIN() với các chức năng khác để trả về giá trị nhỏ nhất trong các khu vực khác.

Ví dụ:sử dụng dữ liệu mẫu của chúng tôi, chúng tôi có thể tìm thấy giá trị có số ký tự tối thiểu trong City cột:

SELECT MIN(CHAR_LENGTH(Name)) AS 'Minimum Character Length'
FROM city;

Kết quả:

+--------------------------+
| Minimum Character Length |
+--------------------------+
|                        3 |
+--------------------------+

Chúng tôi cũng có thể thấy điều này bằng cách sử dụng truy vấn sau (không liên quan đến MIN() chức năng):

SELECT Name, CHAR_LENGTH(Name) AS 'Character Length'
FROM city
ORDER BY `Character Length`
LIMIT 10;

Kết quả:

+------+------------------+
| Name | Character Length |
+------+------------------+
| Ome  |                3 |
| Yao  |                3 |
| Qom  |                3 |
| Itu  |                3 |
| Tsu  |                3 |
| Ube  |                3 |
| Ise  |                3 |
| Uji  |                3 |
| Ede  |                3 |
| Ota  |                3 |
+------+------------------+

Do nhiều thành phố có cùng độ dài ký tự, chúng tôi có thể điều chỉnh truy vấn này để chỉ trả về các giá trị riêng biệt:

SELECT DISTINCT CHAR_LENGTH(Name) AS 'Character Length'
FROM city
ORDER BY `Character Length`
LIMIT 10;

Kết quả:

+------------------+
| Character Length |
+------------------+
|                3 |
|                4 |
|                5 |
|                6 |
|                7 |
|                8 |
|                9 |
|               10 |
|               11 |
|               12 |
+------------------+

Sử dụng mệnh đề OVER

Như đã đề cập, cú pháp cho phép OVER mệnh đề được bao gồm trong các truy vấn của bạn. Về cơ bản, OVER mệnh đề cho phép bạn chỉ định cách phân chia các hàng truy vấn thành các nhóm để xử lý bởi hàm cửa sổ.

Đây là một ví dụ:

SELECT 
    District,
    Name AS City,
    Population AS 'City Population',
    MIN(Population) OVER(PARTITION BY District) AS 'District Minimum'
FROM City
WHERE CountryCode = 'AUS'
ORDER BY `District Minimum` DESC;

Kết quả:

+-----------------+---------------+-----------------+------------------+
| District        | City          | City Population | District Minimum |
+-----------------+---------------+-----------------+------------------+
| West Australia  | Perth         |         1096829 |          1096829 |
| South Australia | Adelaide      |          978100 |           978100 |
| Capital Region  | Canberra      |          322723 |           322723 |
| New South Wales | Sydney        |         3276207 |           219761 |
| New South Wales | Wollongong    |          219761 |           219761 |
| New South Wales | Newcastle     |          270324 |           219761 |
| New South Wales | Central Coast |          227657 |           219761 |
| Tasmania        | Hobart        |          126118 |           126118 |
| Victoria        | Melbourne     |         2865329 |           125382 |
| Victoria        | Geelong       |          125382 |           125382 |
| Queensland      | Townsville    |          109914 |            92273 |
| Queensland      | Brisbane      |         1291117 |            92273 |
| Queensland      | Cairns        |           92273 |            92273 |
| Queensland      | Gold Coast    |          311932 |            92273 |
+-----------------+---------------+-----------------+------------------+

Ví dụ này phân vùng các hàng theo District , cung cấp giá trị tối thiểu cho mỗi phân vùng (quận). Điều này cho phép bạn xem dữ liệu chi tiết hơn, chẳng hạn như dân số của từng thành phố, cùng với dân số của thành phố nhỏ nhất (theo dân số) trong cùng một quận.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Trigger chỉ sau khi cập nhật nếu hàng đã thay đổi

  2. Hiệu suất MySQL DigitalOcean tốt nhất - ScaleGrid so với Cơ sở dữ liệu được quản lý DigitalOcean

  3. MySQL - LỖI 1045 - Quyền truy cập bị từ chối

  4. Lỗi nhập MySQLdb trong Python - Mac 10.6

  5. MySQL so khớp () với () - thứ tự theo mức độ liên quan và cột?