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

3 cách để chọn hàng có giá trị tối đa trong SQL

Dưới đây là ba ví dụ sử dụng SQL để tìm và chọn hàng có giá trị lớn 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

Chúng tôi sẽ 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      |
| 7       | Punch     | 3       |
+---------+-----------+---------+

Tùy chọn 1

Dưới đây là ví dụ về việc chọn hàng có giá trị lớn nhất từ ​​Score cột trong bảng trên:

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

Kết quả:

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

Chúng tôi đã sử dụng MAX() hàm trong một truy vấn con để tìm giá trị lớn 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 đa

Sử dụng phương pháp này, nếu có nhiều hơn một hàng có giá trị lớn nhất, thì 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 điểm với điểm tối đa hiện có:

INSERT INTO PetShow VALUES (8, 'Purr', 85);
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       |
| 8       | Purr      | 85      |
+---------+-----------+---------+

Chúng ta có thể thấy rằng cả Wag và Purr đều có số điểm cao nhất là 85.

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

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

Kết quả:

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

Cả hai hàng có giá trị tối đa đều được trả về như mong đợi.

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 MAX(Score) FROM PetShow )
ORDER BY PetId ASC
LIMIT 1;

Kết quả:

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

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 MAX(Score) FROM PetShow )
ORDER BY PetId ASC;

Kết quả:

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

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

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

Kết quả:

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

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 DESC
LIMIT 1;

Kết quả:

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

Trong SQL Server:

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

Kết quả:

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

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

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

Kết quả:

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

Tùy chọn 3

Một cách khác để chọn hàng có giá trị lớn 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. Làm cách nào để khởi động Mongo DB từ Windows?

  2. Không thể kết nối với mongodb bằng ip máy

  3. Mongo Query với Regex trong Node JS hoạt động TRÊN MỘT BIẾN TẦN

  4. Mongoose:Nhận danh sách người dùng đầy đủ

  5. MongoDB:tổng hợp trường thêm $ dự án với giá trị tĩnh