【发布时间】:2017-03-23 17:30:59
【问题描述】:
我的桌子是:
表 1
Uid、hospital_nr、department_nr、diagnosis_nr、case_amount
我的查询: 我想知道,对于每家医院,哪个科室的三个特定诊断病例最多。
要找出这些诊断的每个部门的病例总数,我使用:
SELECT hospital_nr, department_nr, sum(case_amount) AS cases
FROM Table_1
WHERE diagnosis_nr = 1 OR diagnosis_nr = 3 OR diagnosis_nr = 4
GROUP BY hospital_nr, department_nr;
要找出一个部门对各个医院的最大病例数,我使用:
SELECT b.hospital_nr, max(a.sum_of_cases) AS max_sum_of_cases
FROM hdiag_data2014 AS b,
(SELECT Hospital_nr, department_nr, sum(case_amount) AS sum_of_cases
FROM Table_1
WHERE diagnosis_nr = 1 OR diagnosis_nr = 3 OR diagnosis_nr = 4
GROUP BY hospital_nr, department_nr) AS a
WHERE diagnosis_nr = 1 OR diagnosis_nr = 3 OR diagnosis_nr = 4
AND b.hospital_nr = a.hospital_nr
GROUP BY b.hospital_nr;
现在我想在一个 INNER JOIN 中加入这两个表并尝试了这个:
SELECT c.hospital_nr, c.department_nr, sum(case_amount) AS cases
FROM Table_1 AS c
INNER JOIN
(SELECT b.hospital_nr max(a.sum_of_cases) AS max_sum_of_cases
FROM Table_1 AS b,
(SELECT hospital_nr, department_nr, sum(case_amount) AS sum_of_cases
FROM Table_1
WHERE diagnosis_nr = 1 OR diagnosis_nr = 3 OR diagnosis_nr = 4
GROUP BY hospital_nr, department_nr) AS a
WHERE b.diagnosis_nr = 1 OR b.diagnosis_nr = 3 OR b.diagnosis_nr = 4
AND b.hospital_nr = a.hospital_nr
GROUP BY b.hospital_nr) AS b
ON c.cases = b.max_sum_of_cases
WHERE c.diagnosis_nr = 1 OR c.diagnosis_nr = 3 OR c.diagnosis_nr = 4
GROUP BY c.hospital_nr;
这个脚本不允许我通过这个 ON 加入,因为它说它不能将“案例”识别为列。这是为什么?我该如何改进它? 我回答“口头查询”的第一条路径是通过 HAVING 子句工作,但这也不成功,因为它不允许我按案件数量最多的部门进行过滤。我忽略了这条替代路径中的某些内容吗?
【问题讨论】: