Pourquoi votre deuxième requête ne fonctionne pas...
select Item_No,
Quantity
from Rec_details
group by Item_No,
Quantity
having Quantity=max(Quantity);
Vous regroupez par les deux Item_No
et Quantity
et le Item_No
semble être la clé primaire et contient des valeurs uniques, de sorte que chaque groupe ne contiendra qu'une seule ligne. Le HAVING
la clause recherche dans le groupe afin de vérifier que la valeur de quantity
est la valeur maximale dans ce groupe mais il n'y a qu'une seule valeur dans le groupe donc ce sera toujours vrai. Votre requête est l'équivalent de :
SELECT DISTINCT
Item_No,
Quantity
FROM Rec_details;
Quelques autres façons d'obtenir la valeur maximale :
Configuration du schéma 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;
Requête 1 - Obtenir une ligne avec une quantity
maximale et le dernier item_no
(en utilisant 1 balayage de table) :
SELECT MAX( item_no ) KEEP ( DENSE_RANK LAST ORDER BY Quantity ) AS Item_no,
MAX( Quantity ) AS Quantity
FROM Rec_Details
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Requête 2 - Obtenir une ligne avec une quantity
maximale et le dernier item_no
(en utilisant 1 balayage de table) :
SELECT *
FROM (
SELECT *
FROM Rec_details
ORDER BY Quantity DESC, Item_no DESC
)
WHERE ROWNUM = 1
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Requête 3 – Obtenir toutes les lignes avec la quantity
maximale (en utilisant 1 balayage de table) :
SELECT Item_no, Quantity
FROM (
SELECT r.*,
RANK() OVER ( ORDER BY Quantity DESC ) AS rnk
FROM Rec_details r
)
WHERE rnk = 1
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |
Requête 4 – Obtenir toutes les lignes avec la quantity
maximale (en utilisant 2 balayages de table) :
SELECT Item_no,
Quantity
FROM Rec_Details
WHERE Quantity = ( SELECT MAX( Quantity ) FROM Rec_Details )
| ITEM_NO | QUANTITY |
|---------|----------|
| 12100 | 8 |