编写sql查询以查找其患者患有最不同类型的疾病的医生

时间:2019-12-06 03:16:36

标签: sql

我正试图弄清楚如何编写此查询,但我真的很难受。

以下是与该问题相关的表格:

医生表,其中包含列:

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
  )
);

2 个答案:

答案 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;
相关问题