如何在每个病房中找到最高的病人

时间:2019-01-03 15:27:38

标签: sql

我有两个表:

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) 

我不了解该子查询是否可以有人对其进行解释。 谢谢

2 个答案:

答案 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个问题(最好的五个问题,两个最低的问题,每个问题最高的一个...),您应该始终说出在有关系的情况下该怎么做。

关于模型答案:是的,这是解决此问题的一种方法。查找在同一病房中没有其他人的身高更高的人。您使用人员表两次,别名不同,因此您要检查的人员有一个别名,而要与之进行比较的人员又有一个别名。还有几种其他方法可以解决同一问题。