SYSDATE 在 Oracle sqldeveloper 中查找项目的平均工作日数
Posted
技术标签:
【中文标题】SYSDATE 在 Oracle sqldeveloper 中查找项目的平均工作日数【英文标题】:SYSDATE to find average amount of workdays on a project in Oracle sqldeveloper 【发布时间】:2015-03-31 05:09:00 【问题描述】:我在 ETSU 学习数据库基础。我们的讲师来自孟加拉国,因此有时很难听懂他的讲课。那么 SYSDATE 的使用就是那些日子之一。然后在我们实验室有这个问题,
显示按 job_id 分组的员工的平均工作时间(天数)。假设没有人辞职或被解雇。使用 Oracle 日期函数 SYSDATE。
经过数小时的谷歌和堆栈溢出搜索,以及教授未回答的问题,它仍然难倒我。
我尝试了几个(SELECT、FROM、GROUP_BY、HAVING 和 ORDER_BY),终于来到这里寻求帮助。
这是我的脚本:
SELECT job_id, hire_date
FROM hr.employees
GROUP BY job_id
HAVING AVG(SYSDATE) - hire_date;
这是我的错误: 从行开始的错误:命令中的 1 - 选择 job_id,hire_date FROM hr.employees 按作业 ID 分组 HAVING AVG(SYSDATE) - 雇用日期; 命令行错误:4 列:31 错误报告 - SQL 错误:ORA-00920:无效的关系运算符 00920. 00000 - “无效的关系运算符”
我做错了什么?
【问题讨论】:
AVG(SYSDATE) - hire_date
不是布尔条件 - 这就是错误消息告诉您的内容。另外:您无法计算单个日期的平均值(如果定义了这样的操作,它只会产生 sysdate)
啊,看到这有助于我更多地了解 SYSDATE 的用途。现在,当我被问到一个测试或有另一个实验室要求它时,我将更有能力回答并正确回答。我很高兴我问了。
【参考方案1】:
显示按 job_id 分组的员工的平均工作时间(天数)。假设没有人辞职或被解雇。使用 Oracle 日期函数 SYSDATE。
因此,假设没有员工在受雇后被解雇,让我们看下面的示例,该示例可以找到每个部门员工的平均工作时间。此外,这假设一周中的所有日子(包括周末)。
SQL> SELECT deptno,
2 ROUND(AVG(SYSDATE - hiredate), 2) avg_duration
3 FROM emp
4 GROUP BY deptno
5 /
DEPTNO AVG_DURATION
---------- ------------
30 12327.79
20 12135.45
10 12218.79
SQL>
如果您不想包括周末,则需要过滤掉那些属于周末或节假日的日期。
提示,where to_char(that_date, 'Dy') not in ('Sat', 'Sun')
但是,我觉得这个问题太简单了,没必要搞得这么复杂。所以,上面的解决方案就足够了。
【讨论】:
好吧,我想我明白了。我用过 AVG,甚至用过 ROUND。它在实验室里不起作用。让我试试看会发生什么。编辑:它奏效了!非常感谢你。我从早上 10 点开始就一直在做这件事。现在把它上交,看看是不是他想要的。以上是关于SYSDATE 在 Oracle sqldeveloper 中查找项目的平均工作日数的主要内容,如果未能解决你的问题,请参考以下文章