2012-12-02 2 views
0

J'essaie de ne sélectionner la valeur MAX pour une colonne résuméSomme de sous-requête (Max())

select rental.member_id, 
     rental.rental_id, 
     sum(rental_line.Qty) as TotalRentals 
    from Rental 
INNER JOIN rental_line 
    on rental.rental_id =rental_line.rental_id 
where MONTHS_BETWEEN(sysdate, datein)<(12) 
group by rental.member_id, 
     rental.rental_id, 
     SUM(TotalRentals) = MAX(SUM(TotalRentals)); 

Toutes les idées?

Répondre

1

Vous pouvez sorte résultats de la requête par TotalRentals (3) dans l'ordre décroissant, puis prendre la première ligne avec rownum Pseudo-:

select member_id 
    , rental_id 
    , TotalRentals 
    from (select rental.member_id 
       , rental.rental_id 
       , sum(rental_line.Qty) as TotalRentals 
      from Rental 
      INNER JOIN rental_line 
      on rental.rental_id =rental_line.rental_id 
      where MONTHS_BETWEEN(sysdate, datein)<(12) 
      group by rental.member_id, 
        rental.rental_id 
      order by 3 desc 
    ) 
where rownum = 1 
+0

Wow, qui fonctionne un régal merci! Si je voulais ajouter les colonnes membres FName et SName qui sont jointes à partir de la table membre. Aurais-je simplement ajouter les champs dans les sections de sélection et de regroupement? – WibblyWobbly

+0

@ user1860423 Essayez-le. Et ne pas oublier la clause 'group by' :) –

+0

J'ai essayé d'ajouter les champs supplémentaires, mais je reçois des erreurs liées à l'identifiant invalide même si la table des membres contient les champs corrects? select member_id, member.FNAME , member.SName , rental_id , TotalRentals de (sélectionner rental.member_id , rental.rental_id , somme (rental_line.Qty) comme Location TotalRentals de \t INNER JOIN membre \t sur rental.Member_ID = Member.Member_ID – WibblyWobbly