Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

SQL Sub-Query - como encontrar um valor mínimo


A abordagem mais eficiente é geralmente usar funções analíticas
SELECT hospitalcode,
       name,
       ward,
       annualbudget
  FROM (SELECT h.hospitalcode,
               h.name,
               w.wardno,
               w.annualbudget,
               rank() over (order by w.annualbudget asc) rnk
          FROM hospital h
               JOIN ward w
                 ON (h.hospitalcode = w.hospitalcode))
 WHERE rnk = 1

Você também pode, no entanto, usar uma subconsulta
SELECT h.hospitalcode,
       h.name,
       w.wardno,
       w.annualbudget
  FROM hospital h
       JOIN ward w
         ON (h.hospitalcode = w.hospitalcode)
 WHERE w.annualbudget = (SELECT MIN(annualbudget)
                           FROM ward)

Ambos os métodos retornarão várias linhas se houver várias alas vinculadas ao menor orçamento. Com o método de função analítica, você pode usar o row_number função em vez de rank para desempate arbitrariamente se você quiser retornar exatamente 1 linha todas as vezes.