我正试图弄清楚如何编写此查询,但我真的很难受。
以下是与该问题相关的表格:
医生表,其中包含列:
D_ID, D_NAME, D_GENDER, D_AGE, D_SPECIALIZATION, D_YEARS_OF_EXPERIENCE, D_CONTACT, D_STREET, D_CITY
患者表:
P_ID, P_NAME, P_GENDER, P_AGE, P_DISEASE, P_CONTACT, P_STREET, P_CITY
P_Assignment 表:
P_ID, D_ID
问题是:
找到患者的疾病种类最不同的医生。 (您的结果应显示医生的姓名。)
感谢所有为此提供帮助的人,很遗憾,我无法使用此处提供的任何答案,因为其中包括我们在本课程中没有学到的东西。我最终在朋友的帮助下找到了解决方案。这是我们想出的:
SELECT d_name
FROM Doctors
WHERE d_id IN (
SELECT d_id
FROM (
SELECT DISTINCT d_id, p_disease
FROM P_Assignment, Patients
WHERE P_Assignment.p_id = Patients.p_id
) AS p1
GROUP BY d_id
HAVING COUNT(*) >= ALL (
SELECT COUNT(*)
FROM (
SELECT DISTINCT d_id, p_disease
FROM P_Assignment, Patients
WHERE P_Assignment.p_id = Patients.p_id
) AS p2
GROUP BY d_id
)
);
答案 0 :(得分:1)
我们可以在RANK
分析功能的帮助下尝试进行汇总查询:
;WITH cte AS (
SELECT d.D_ID, d.D_NAME, COUNT(DISTINCT p.P_DISEASE) AS disease_cnt,
RANK() OVER (ORDER BY COUNT(DISTINCT p.P_DISEASE) DESC) rnk
FROM P_ASSIGNMENT pa
INNER JOIN DOCTORS d ON pa.D_ID = d.D_ID
INNER JOIN PATIENTS p ON p.P_ID = pa.P_ID
GROUP BY d.D_ID, d.D_NAME
)
SELECT D_ID, D_NAME, disease_cnt
FROM cte
WHERE rnk = 1;
答案 1 :(得分:0)
我们可以使用GROUP BY和DISTINCT COUNT来让医生获得最大的独特疾病。我假设它是SQL Server。
;WITH CTE_DiseasesCount AS
(
SELECT D_ID, D_NAME,COUNT(DISTINCT P_DISEASE) AS CountOfDistinctDiseases
FROM PATIENTS AS p
INNER JOIN P_ASSIGNMENT as a
ON a.P_ID = p.P_ID
INNER JOIN DOCTORS as d
ON d.D_ID = a.d_ID
GROUP BY D_ID,D_NAME
)
SELECT TOP 1 D_NAME FROM CTE_DiseasesCount
ORDER BY CountOfDistinctDiseases DESC;