在oracle中使用SUM和MAX时遇到了一些困难。
我要做的是找到分数最高的患者。
我想选择总分和患者ID。
如果我运行此查询,我得到的分数最高,但没有达到预期的任何患者详细信息。
SELECT MAX(SUM(PM.score)) AS Total
FROM Patient P, PatientMetabolic PM
WHERE P.patientID = PM.patientID
GROUP BY P.patientID
如果我像这样添加患者ID
SELECT MAX(SUM(PM.score)) AS Total, P.patientId
FROM Patient P, PatientMetabolic PM
WHERE P.patientID = PM.patientID
GROUP BY P.patientID
我得到而不是单组群组功能错误。
感谢你的时间,非常感谢任何帮助。
答案 0 :(得分:0)
这样做:
WITH sums AS
(
SELECT P.patientID, SUM(PM.score) AS Total
FROM Patient P, PatientMetabolic PM
WHERE P.patientID = PM.patientID
GROUP BY P.patientID
)
SELECT * FROM sums WHERE total=(SELECT MAX(total) FROM sums);
这为您提供了MAX分数总和的所有患者ID。
答案 1 :(得分:0)
您可以使用RANK() OVER()
按分数对患者进行排名,并选择排名最高的患者;
WITH cte AS (
SELECT p.patientid, p.name, SUM(pm.score) AS Total,
RANK() OVER (ORDER BY SUM(pm.score) DESC) rank
FROM patient p
JOIN patientmetabolic pm
ON p.patientid = pm.patientid
GROUP BY p.patientid, p.name
)
SELECT patientid, name FROM cte WHERE rank=1;
如果您不想要关联以返回多个结果,则可以使用ROW_NUMBER() OVER()
来破坏关系。
如果您想要整个排名列表,只需删除外部查询的排名条件(在这种情况下,您可能希望按排名顺序)