Oracle
 sql >> Database >  >> RDS >> Oracle

SQL Sub-Query:come trovare un valore minimo

L'approccio più efficiente è generalmente quello di utilizzare funzioni analitiche

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

Tuttavia, puoi anche utilizzare una sottoquery

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)

Entrambi questi metodi restituiranno più righe se ci sono più reparti che sono legati per il budget più basso. Con il metodo della funzione analitica, puoi usare il row_number funzione anziché rank per rompere arbitrariamente il pareggio se vuoi restituire esattamente 1 riga ogni volta.