SQL子查询 - 如何查找最小值

Mat*_*tin 1 sql oracle min

我创建了一个子查询,如下所示

select hospital.hospitalcode, name, wardno, annualbudget
from hospital, ward
where hospital.hospitalcode = ward.hospitalcode
Run Code Online (Sandbox Code Playgroud)

我想回答的问题是:考虑到所有医院病房,哪家医院的病房年度预算最低?您应该显示医院代码及其名称,病房号码和年度预算.

我如何找到这个问题的单一条目?我意识到我需要使用MIN,但在使用多个列名时不知道在哪里使用它

Jus*_*ave 5

更有效的方法通常是使用分析函数

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
Run Code Online (Sandbox Code Playgroud)

但是,您也可以使用子查询

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)
Run Code Online (Sandbox Code Playgroud)

如果有多个病房与最低预算相关联,这两种方法都将返回多行.使用分析函数方法,如果要每次只返回1行,则可以使用该row_number函数而不是rank任意打破平局.