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

Làm cách nào để CHỌN hàng đầu tiên có MAX (Giá trị cột)?

Tại sao truy vấn thứ hai của bạn không hoạt động ...

select   Item_No,
         Quantity
from     Rec_details
group by Item_No,
         Quantity
having   Quantity=max(Quantity);

Bạn đang nhóm theo cả Item_NoQuantityItem_No dường như là khóa chính và chứa các giá trị duy nhất nên mỗi nhóm sẽ chỉ chứa một hàng. HAVING mệnh đề này nằm trong nhóm nên nó sẽ kiểm tra xem giá trị của quantity là giá trị lớn nhất trong nhóm đó nhưng chỉ có một giá trị trong nhóm nên điều này sẽ luôn đúng. Truy vấn của bạn tương đương với:

SELECT DISTINCT
       Item_No,
       Quantity
FROM   Rec_details;

Một số cách khác để nhận giá trị lớn nhất:

SQL Fiddle

Thiết lập lược đồ Oracle 11g R2 :

create table Rec_details (item_no, Quantity ) AS
SELECT 12507,1 FROM DUAL UNION ALL
SELECT 12549,4 FROM DUAL UNION ALL
SELECT 12100,8 FROM DUAL UNION ALL
SELECT 12501,2 FROM DUAL UNION ALL
SELECT 12201,7 FROM DUAL UNION ALL
SELECT 12509,3 FROM DUAL UNION ALL
SELECT 12080,1 FROM DUAL;

Truy vấn 1 - Nhận một hàng với số lượng quantityitem_no mới nhất (sử dụng 1 lần quét bảng) :

SELECT MAX( item_no ) KEEP ( DENSE_RANK LAST ORDER BY Quantity ) AS Item_no,
       MAX( Quantity ) AS Quantity
FROM   Rec_Details

Kết quả :

| ITEM_NO | QUANTITY |
|---------|----------|
|   12100 |        8 |

Truy vấn 2 - Nhận một hàng với số lượng quantityitem_no mới nhất (sử dụng 1 lần quét bảng) :

SELECT *
FROM   (
  SELECT *
  FROM   Rec_details
  ORDER BY Quantity DESC, Item_no DESC
)
WHERE ROWNUM = 1

Kết quả :

| ITEM_NO | QUANTITY |
|---------|----------|
|   12100 |        8 |

Truy vấn 3 - Nhận tất cả các hàng với số lượng quantity (sử dụng 1 lần quét bảng) :

SELECT Item_no, Quantity
FROM   (
  SELECT r.*,
         RANK() OVER ( ORDER BY Quantity DESC ) AS rnk
  FROM   Rec_details r
)
WHERE rnk = 1

Kết quả :

| ITEM_NO | QUANTITY |
|---------|----------|
|   12100 |        8 |

Truy vấn 4 - Nhận tất cả các hàng với số lượng quantity (sử dụng 2 lần quét bảng) :

SELECT Item_no,
       Quantity
FROM   Rec_Details
WHERE  Quantity = ( SELECT MAX( Quantity ) FROM Rec_Details )

Kết quả :

| ITEM_NO | QUANTITY |
|---------|----------|
|   12100 |        8 |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Xử lý múi giờ trong ứng dụng web

  2. Số không hợp lệ

  3. Làm cách nào để chỉ đếm các giá trị NULL trong Oracle / PLSQL?

  4. Tôi cần trợ giúp chuyển đổi truy vấn T-SQL sang truy vấn được Oracle hỗ trợ

  5. Chuyển đổi kỷ nguyên sang ngày tháng trong sqlplus / Oracle