为什么您的第二个查询不起作用...
select Item_No,
Quantity
from Rec_details
group by Item_No,
Quantity
having Quantity=max(Quantity);
您同时按Item_No 和Quantity 进行分组,Item_No 似乎是主键并包含唯一值,因此每个组将只包含一行。 HAVING 子句在组内查找,因此它将检查 quantity 的值是否是该组内的最大值,但组内只有一个值,所以这将始终为真。您的查询相当于:
SELECT DISTINCT
Item_No,
Quantity
FROM Rec_details;
其他一些获取最大值的方法:
SQL Fiddle
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;
查询 1 - 获取最大 quantity 和最新 item_no 的一行(使用 1 表扫描):
SELECT MAX( item_no ) KEEP ( DENSE_RANK LAST ORDER BY Quantity ) AS Item_no,
MAX( Quantity ) AS Quantity
FROM Rec_Details
Results:
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
查询 2 - 获取最大 quantity 和最新 item_no 的一行(使用 1 个表扫描):
SELECT *
FROM (
SELECT *
FROM Rec_details
ORDER BY Quantity DESC, Item_no DESC
)
WHERE ROWNUM = 1
Results:
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
查询 3 - 获取最大为 quantity 的所有行(使用 1 个表扫描):
SELECT Item_no, Quantity
FROM (
SELECT r.*,
RANK() OVER ( ORDER BY Quantity DESC ) AS rnk
FROM Rec_details r
)
WHERE rnk = 1
Results:
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
查询 4 - 获取最大 quantity 的所有行(使用 2 次表扫描):
SELECT Item_no,
Quantity
FROM Rec_Details
WHERE Quantity = ( SELECT MAX( Quantity ) FROM Rec_Details )
Results:
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |