MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

3 cách để chọn hàng có giá trị nhỏ nhất trong SQL

Dưới đây là ba ví dụ về việc sử dụng SQL để tìm và chọn hàng có giá trị nhỏ nhất trong một cột nhất định.

Các ví dụ hoạt động trong hầu hết các RDBMS chính, bao gồm MySQL, MariaDB, PostgreSQL, SQLite, Oracle và SQL Server.

Dữ liệu Mẫu

Hãy bắt đầu với dữ liệu sau:

SELECT * FROM PetShow;

Kết quả:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 1       | Wag       | 85      |
| 2       | Scratch   | 3       |
| 3       | Tweet     | 65      |
| 4       | Bark      | 8       |
| 5       | Ruff      | 15      |
| 6       | Woof      | 20      |
+---------+-----------+---------+

Tùy chọn 1

Đây là tùy chọn đầu tiên của chúng tôi để chọn hàng có giá trị nhỏ nhất từ ​​bảng trên:

SELECT 
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow );

Kết quả:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 2       | Scratch   | 3       |
+---------+-----------+---------+

Ở đây, chúng tôi đã sử dụng MIN() hàm trong một truy vấn con để tìm giá trị nhỏ nhất và trả về toàn bộ hàng với truy vấn bên ngoài.

Khi có Nhiều Hàng với Giá trị Tối thiểu

Sử dụng phương pháp này, nếu có nhiều hàng có giá trị nhỏ nhất, tất cả chúng đều được trả về.

Giả sử chúng ta chèn một hàng khác vào bảng của mình với cùng số điểm với số điểm tối thiểu hiện có:

INSERT INTO PetShow VALUES (7, 'Punch', 3);
SELECT * FROM PetShow;

Bảng của chúng ta bây giờ trông như thế này:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 1       | Wag       | 85      |
| 2       | Scratch   | 3       |
| 3       | Tweet     | 65      |
| 4       | Bark      | 8       |
| 5       | Ruff      | 15      |
| 6       | Woof      | 20      |
| 7       | Punch     | 3       |
+---------+-----------+---------+

Chúng ta có thể thấy rằng cả Scratch và Punch đều có số điểm thấp là 3.

Hãy chạy lại truy vấn trước đó để trả về giá trị nhỏ nhất từ ​​cột đó:

SELECT 
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow );

Kết quả:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 2       | Scratch   | 3       |
| 7       | Punch     | 3       |
+---------+-----------+---------+

Cả hai hàng có giá trị nhỏ nhất đều được trả về.

Chúng tôi có thể giới hạn kết quả được đặt thành chỉ một hàng nếu được yêu cầu. Mã chính xác sẽ phụ thuộc vào RDBMS đang được sử dụng.

LIMIT mệnh đề có thể được sử dụng với RDBS như PostgreSQL, MariaDB, MySQL và SQLite:

SELECT 
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC
LIMIT 1;

Kết quả:

+-------+---------+-------+
| PetId | PetName | Score |
+-------+---------+-------+
|     2 | Scratch |     3 |
+-------+---------+-------+

Trong SQL Server, chúng ta có thể sử dụng TOP mệnh đề:

SELECT TOP 1
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC;

Kết quả:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 2       | Scratch   | 3       |
+---------+-----------+---------+

Và trong Cơ sở dữ liệu Oracle, chúng ta có thể làm điều này:

SELECT
    PetId,
    PetName,
    Score
FROM PetShow 
WHERE Score = ( SELECT MIN(Score) FROM PetShow )
ORDER BY PetId ASC
FETCH FIRST 1 ROW ONLY;

Kết quả:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 2       | Scratch   | 3       |
+---------+-----------+---------+

Tùy chọn 2

Nếu chúng tôi chỉ muốn trả về một hàng, chúng tôi thực sự có thể loại bỏ hầu hết các mã khác và chỉ lấy hàng đầu tiên trong số các kết quả được sắp xếp:

SELECT 
    PetId,
    PetName,
    Score
FROM PetShow 
ORDER BY Score ASC
LIMIT 1;

Kết quả:

+-------+---------+-------+
| PetId | PetName | Score |
+-------+---------+-------+
|     7 | Punch   |     3 |
+-------+---------+-------+

Trong SQL Server:

SELECT TOP 1
    PetId,
    PetName,
    Score
FROM PetShow 
ORDER BY Score ASC;

Kết quả:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 2       | Scratch   | 3       |
+---------+-----------+---------+

Và trong Cơ sở dữ liệu Oracle:

SELECT
    PetId,
    PetName,
    Score
FROM PetShow 
ORDER BY Score ASC
FETCH FIRST 1 ROW ONLY;

Kết quả:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 2       | Scratch   | 3       |
+---------+-----------+---------+

Tùy chọn 3

Một cách khác để chọn hàng có giá trị nhỏ nhất là tự tham gia vào bảng, như sau:

SELECT 
    p1.PetId, 
    p1.PetName, 
    p1.Score
FROM PetShow p1
LEFT JOIN PetShow p2 ON p1.Score < p2.Score
WHERE p2.PetId IS NULL;

Kết quả:

+---------+-----------+---------+
| PetId   | PetName   | Score   |
|---------+-----------+---------|
| 1       | Wag       | 85      |
| 8       | Purr      | 85      |
+---------+-----------+---------+

Như với ví dụ trước đó, chúng tôi có thể giới hạn kết quả ở một hàng (hoặc một số số khác) nếu được yêu cầu.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Triển khai MongoDB trong Amazon Virtual Private Cloud (VPC)

  2. Đối tượng được nhúng MongoDB không có ID (giá trị null)

  3. Lập bản đồ tài liệu với lược đồ được xác định một phần

  4. Toán tử tổng hợp MongoDB $ sortByCount

  5. Mongorestore có thể lấy một đối số url duy nhất thay vì các đối số riêng biệt không?