sql >> Base de Datos >  >> RDS >> Oracle

Subconsulta SQL:cómo encontrar un valor mínimo

El enfoque más eficiente es generalmente usar funciones 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

Sin embargo, también puede usar una 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 métodos devolverán varias filas si hay varios distritos que están empatados con el presupuesto más bajo. Con el método de función analítica, puede usar el row_number función en lugar de rank para romper arbitrariamente el empate si desea devolver exactamente 1 fila cada vez.