我的问题是如何为下面突出显示的/粗体问题正确编写SQL查询。
HMO数据库中有一张表,用于存储医生的工作情况 hours.Table有以下字段 “名字”, “姓氏”, “日期”, “HoursWorked”。写一个sql语句 它检索1月至3月期间的平均工作时间 名叫Joe Doe的医生。
到目前为止我已经
了SELECT HoursWorked
FROM Table
WHERE DATE = (January - March) AND
SELECT AVG(HoursWorked) FROM Table WHERE FirstName="Joe",LastName="Doe"*
答案 0 :(得分:1)
一些指示,因为这听起来像是一个家庭作业问题(我们不会在这里为您解答,但我们可以尝试给您一些指导)。
您希望首先从您的选择中输入您想要返回的所有内容,并且希望最终拥有所有搜索条件。
所以一般格式是:
SELECT Column1,
Column2,
Column3,
FROM YourTable
WHERE Column4 = Restriction1
AND Column5 = Restriction2
您需要考虑的下一件事是如何在数据库表中格式化日期。希望它们保存在日期时间或日期类型的列中(选项取决于您使用的数据库引擎,例如Microsoft SQL Server,Oracle或MySql)。实际上,人们使用的一些较旧的数据库可以存储各种格式的日期,这使得这更加困难,但由于我假设它是一个家庭作业类型的问题,我们假设它是一种日期时间格式。
您可以通过将列与值进行比较来指定限制,因此如果您希望日期在2012年3月2日午夜之后的所有行,您将拥有WHERE子句:
WHERE MyDateColumn >= '2012-03-02 00:00:00'
请注意,为避免混淆,我们通常会尝试将日期格式设置为"年 - 月 - 日小时:分钟:秒"。这是因为在不同的国家/地区,日期通常以不同的格式编写,这被认为是一种通用格式,至少可以通过计算机进行理解。
所以你想在你的WHERE中结合几个这样的比较,一个用于特定日期之后的日期,另一个用于另一个时间点之前的日期。
如果你试一试,看看你去哪里,用你的进度更新你的问题,如果你有问题,有人可以帮助你完成。
如果您无法访问实际数据库并需要体验语法,请尝试使用以下网站:http://sqlfiddle.com/
答案 1 :(得分:0)
你已经有了写的答案
SELECT AVG(HoursWorked) FROM Table WHERE FirstName="Joe",LastName="Doe"*
您只需修复查询
SELECT AVG(HoursWorked) as AVGWORKED FROM Table WHERE FirstName='Joe' AND LastName='Doe'
该查询将为您提供Joe Doe的平均工作时间,但是您只需要在一段时间内添加下一个" AND",如果您使用的是SQL Server,则可以使用内置的函数DateFromParts(年,月,日)创建一个新日期,或者如果您正在使用另一个数据库引擎,您可以将字符串转换为DateColumn转换(日期,' MM / dd / yyyy')
实施例
SELECT AVG(HoursWorked) as AVGWORKED FROM Table WHERE FirstName='Joe' AND LastName='Doe' AND DateColumn between DateFromParts(year,month,day) and Convert(Date,'MM/dd/yyyy')
在示例中,我展示了两种方法(datefromparts表示初始日期,转换(日期)表示结束日期)。