我有两个表:
patient (patient_id (PK), patient_name, gender, height, weight, staff_no, ward_no)
ward (ward_no (PK), ward_name, number_of_beds)
我想在每个病房中找到最高的病人。
这是我的查询
Select patient_name, MAX(height) from patient Group By patient_name
此查询有效吗?
这是一个模拟考试题,所以我有模型答案。
select patient_name
from patient p1
where not exists (select * from patient p2 where p1.ward_no = p2.ward_no and p1.height < p2 .height)
我不了解该子查询是否可以有人对其进行解释。 谢谢
答案 0 :(得分:2)
奇怪的答案。我会选择更直接的方法:
node_modules
相关子查询正在获取给定患者病房中所有患者的最大身高。然后返回所有与此高度匹配的患者。
您的版本正在执行类似的操作。据说“病房里没有病人有更大的身高”。有时,这是在考试中使用select p.patient_name
from patient p
where p.height = (select max(p2.height)
from patient p2
where p2.ward_no = p.ward_no
) ;
来表示的:
all
实际上,select p.patient_name
from patient p
where p.height >= all (select p2.height
from patient p2
where p2.ward_no = p.ward_no
) ;
和any
的使用频率较低。
答案 1 :(得分:0)
这是您的查询:
AsyncTask
您想在每个病房中找到最高的人,但是该病房甚至不在您的查询中出现;)而是您要分组的病房,以便每个病房获得一个结果行,显示该行中最高的人。
但是,您需要一个可以让患者获得最大身高的聚合功能。我知道支持该功能的唯一DBMS是Oracle(Select patient_name, MAX(height) from patient Group By patient_name;
)。这向我们表明,对于SQL问题,您应该始终告诉我们您要的是哪个DBMS。
Oracle的功能将使每个病房返回一个人。但是,如果一个病房中有两个身高相同的高个子怎么办?有了这样的前n个问题(最好的五个问题,两个最低的问题,每个问题最高的一个...),您应该始终说出在有关系的情况下该怎么做。
关于模型答案:是的,这是解决此问题的一种方法。查找在同一病房中没有其他人的身高更高的人。您使用人员表两次,别名不同,因此您要检查的人员有一个别名,而要与之进行比较的人员又有一个别名。还有几种其他方法可以解决同一问题。