我创建了一个子查询,如下所示
select hospital.hospitalcode, name, wardno, annualbudget
from hospital, ward
where hospital.hospitalcode = ward.hospitalcode
Run Code Online (Sandbox Code Playgroud)
我想回答的问题是:考虑到所有医院病房,哪家医院的病房年度预算最低?您应该显示医院代码及其名称,病房号码和年度预算.
我如何找到这个问题的单一条目?我意识到我需要使用MIN,但在使用多个列名时不知道在哪里使用它
更有效的方法通常是使用分析函数
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任意打破平局.