将SQL知识应用于日常工作场所活动

时间:2016-04-01 11:00:58

标签: sql

我的问题是如何为下面突出显示的/粗体问题正确编写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"*

2 个答案:

答案 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表示初始日期,转换(日期)表示结束日期)。