usando max () y sum ()

Necesito encontrar el 'nombre de la sucursal que ha hecho más dinero en 2009'. Mis tablas están a continuación:

Rental (cid, copyid, outdate, returndate, cost) Copy (copyid, mid, bid) Branch (bid, bname, baddress) 

He escrito el siguiente código y muestra la sum de todas las twigs, pero necesito la sum de la twig que generó más dinero. No estoy seguro de cómo unirme a las funciones max () y sum () en la misma consulta. Estoy usando Oracle 2007.

Escribe el nombre de la twig y la sum (obtengo un resumen de todas las twigs con esto):

 SELECT bname, sum(cost) as Total FROM rented R join copy C on R.copyid = C.copyid join branch B on C.bid = B.bid WHERE outdate between '20090101' and '20091231' GROUP BY bname; 

Saca el máximo de sum (no obtengo mi nombre de twig con esto):

 SELECT sum(total_cost) FROM (SELECT max(cost) as total_cost FROM rented WHERE outdate between '20090101' and '20091231') x; 

¿Cómo puedo unir estos dos para get solo el nombre de la twig de sum máxima?

¿Por qué no solo agarras la fila superior de tu primera consulta?

  SELECT * FROM ( SELECT bname, sum(cost) as Total FROM rented R join copy C on R.copyid = C.copyid join branch B on C.bid = B.bid WHERE outdate between '20090101' and '20091231' GROUP BY bname ORDER BY sum(cost) desc) WHERE ROWNUM=1; 

Sin embargo, una cosa que puede estar olvidando es que dos twigs podrían empatar por ganar la mayor cantidad de dinero. Si desea include todas las sucursales que participan en el empate para el 1er lugar, puede ir con algo como esto (Oracle 9i o posterior).

  SELECT * FROM ( SELECT bname, sum(cost) as Total, RANK() OVER (ORDER BY sum(cost) desc) "Rank" FROM rented R join copy C on R.copyid = C.copyid join branch B on C.bid = B.bid WHERE outdate between '20090101' and '20091231' GROUP BY bname) WHERE Rank=1; 

Muchas forms Por ejemplo, al conservar su consulta original, puede orderar los datos por la sum y luego simplemente tomar la primera fila:

 select * from ( SELECT bname, sum(cost) as Total FROM rented R join copy C on R.copyid = C.copyid join branch B on C.bid = B.bid WHERE outdate between '20090101' and '20091231' GROUP BY bname order by sum(cost) desc ) where rownum = 1;