基于 ERD 图的关于 SQL 的两个问题。 (新手级别)

Two questions about SQL based on an ERD diagram. (novice level)

我附上了一张图片,显示了这两个问题适用的 ERD 图。

ERD 是关于验光医生和他们的病人的。这基本上是课程作业,但我很难理解这两个。

是否有任何 SQL 精明的人愿意用相应的 SQL 语句帮助我?谢谢你。 This is the ERD

1。 患者姓名和目前治疗该患者的医生、最后一次眼型结果的日期、最后一副眼镜类型及其品牌的列表现在显示所有这些也住在芝加哥或圣地亚哥的患者。 还按日期和患者姓名内的日期排序

  1. 一个列表,显示每个品牌的眼镜佩戴相应品牌的每位患者的总数。仅显示患者总数超过 25 的结果。

患者姓名和目前治疗该患者的医生、最后一次眼型结果的日期、最后一副眼镜的类型及其品牌的列表

SELECT Name P.Patient, D.Name Doctor, P.End date, Tog.Type, Tog.Brand
FROM Doctors d JOIN Patients p ON D.DoctorsID=P.DoctorsID
JOIN Type of glasses tog ON P.Patientnumber=tog.Patientnumber

现在显示同时居住在芝加哥或圣地亚哥的所有这些患者。还按日期和患者姓名内的日期排序

SELECT Name P.Patient, D.Name Doctor, P.End date, Tog.Type, Tog.Brand
FROM Doctors d JOIN Patients p ON D.DoctorsID=P.DoctorsID
JOIN Type of glasses tog ON P.Patientnumber=tog.Patientnumber
WHERE P.City= 'Chicago' OR 'San Diego'
ORDER by P.End date, Name Patient

您的 SQL 查询是一个好的开始,但有几点需要注意:

  1. 这些表是如何关联的?如何将它们加入查询(它们如何连接?)?

  2. 在您的 SELECT 声明中,我认为它要求 'glass type' 而不是 'eye type'

  3. SELECT 语句缺少 FROM,指示您要从哪些表中 SELECT - 添加您需要进行的 JOIN 以关联这些表

  4. WHERE 子句看起来不错

  5. ORDER BY 缺少日期(尽管未指定 'Date' - 是开始日期还是结束日期?)

无论如何,把所有这些放在一起你会得到这样的东西:

SELECT Name_patient, Name_doctor, Type, brand, Start_date, End_date
FROM Patients INNER JOIN Doctors
ON Patients.Patientnumber = Doctors.Patientnumber
INNER JOIN Type_of_glasses
ON Patients.Patientnumber = Type_of_glasses.Patientnumber
WHERE City = 'Chicago' OR 'San Diego'
ORDER BY Start_date, End_date, Name_patient;

现在您已准备好尝试第 2 项。试想 'COUNT' 与 'GROUP BY' 匹配,您的条件是 'HAVING > 25' 而不是 'WHERE'

已编辑:

真的很接近 2。 需要添加 JOIN 条件 (ON ...) 并编辑 SELECT 行中的 COUNT 以将字段括在括号中。 GROUP BY 告诉查询您正在计算的组是什么,所以在这里您按品牌分组并计算有多少患者拥有该品牌。

SELECT COUNT(Name_Patient), Brand 
FROM Patients INNER JOIN Type_Of_Glasses 
ON Patients.Patientnumber = Type_of_glasses.Patientnumber
GROUP BY Brand
HAVING count(Name_Patient) > 25