Oracle
 sql >> Base de données >  >> RDS >> Oracle

Sous-requête SQL - comment trouver une valeur minimale

L'approche la plus efficace consiste généralement à utiliser des fonctions analytiques

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

Vous pouvez également utiliser une sous-requête

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)

Ces deux méthodes renverront plusieurs lignes s'il y a plusieurs quartiers qui sont à égalité pour le budget le plus bas. Avec la méthode de la fonction analytique, vous pouvez utiliser le row_number fonction plutôt que rank pour rompre arbitrairement l'égalité si vous souhaitez renvoyer exactement 1 ligne à chaque fois.