需要表格
习惯(conditionId,name)
患者(患者名称,姓名,性别,DoB,地址,州,邮编,家庭电话,商家电话,婚姻状况,职业,持续时间,单位,种族,注册日期,GPNo,NaturopathNo)
PatientMetabolic (functionNo,patientId,score)
问题 -
问题 - 显示吸烟患者的详细信息(即姓名,性别,地址,邮政编码,DOB),并且具有最高(最严重)的代谢功能。
(烟雾的conditionid是Habit表中的H1) (代谢功能在患者代谢表功能中) (为了找到最严重的代谢功能,我们需要创建一个分数总和,告诉谁具有最多的代谢功能)
我的查询 -
SELECT *
FROM patient
where patientid IN (SELECT patientid,SUM(score) as totalscore
from PATIENTMETABOLIC
where patientid IN (SELECT patientid
from patienthabit
where conditionid = 'H1')
group by patientid
order by totalscore desc);
错误:
ORA-00907:缺少右括号
答案 0 :(得分:2)
执行此操作的另一种方法是使用联接。
select * from (select p.patientid,p.name,sum(pm.score) as total from patient p join patienthabit ph on p.patientid = ph.patientid
and ph.conditionid = 'H1' Left join patientmetabolic pm
on p.patientid = pm.patientid group by p.patientid,p.name order by 3 desc) where ROWNUM = 1;
答案 1 :(得分:1)
试试这个:
SELECT *
FROM PATIENT
WHERE PATIENTID = (SELECT PATIENTID
FROM (SELECT patientid, SUM(score)
from PATIENTMETABOLIC
where patientid IN (SELECT patientid
from patienthabit
where conditionid = 'H1')
group by patientid
order by SUM(score) desc)
WHERE ROWNUM = 1);
分享并享受。
答案 2 :(得分:0)
由于第一个内部查询返回patientid和totalscore,因此您无法将其用作针对IN
运算符的列表。
此查询的结果可能类似于查询的结果:
SELECT p.*
FROM patient p JOIN
patienthabit ph ON p.patientid=ph.patientid
WHERE ph.conditionid='H1'