Oracle
 sql >> Datenbank >  >> RDS >> Oracle

SQL-Unterabfrage - So finden Sie einen Mindestwert

Der effizientere Ansatz ist im Allgemeinen die Verwendung von Analysefunktionen

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

Sie können aber auch eine Unterabfrage verwenden

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)

Beide Methoden geben mehrere Zeilen zurück, wenn es mehrere Stationen gibt, die für das niedrigste Budget gebunden sind. Bei der analytischen Funktionsmethode können Sie die row_number verwenden Funktion statt rank um das Unentschieden willkürlich zu brechen, wenn Sie jedes Mal genau 1 Zeile zurückgeben möchten.