在SQL中创建带计数的视图

时间:2018-11-28 23:03:02

标签: sql oracle view count

我需要通过计算给雇员的任务数量来创建SQL视图,但只显示具有3个以上任务的雇员。我遇到的问题是在视图中显示计数。我收到的错误是“缺少正确的括号”

CREATE VIEW EMPLOYEE_TASKS (E.EMPLOYEE_ID, E.FIRST_NAME, E.LAST_NAME, 
T.TASK_ID)

AS SELECT COUNT T.TASK_ID

FROM EMPLOYEE E, TASK T

WHERE E.EMPLOYEE_ID = T.TASK_ID

AND COUNT(T.TASK_ID) > 3;  

3 个答案:

答案 0 :(得分:2)

您的代码毫无意义。我怀疑你想要

CREATE VIEW EMPLOYEE_TASKS AS
    SELECT E.EMPLOYEE_ID, E.FIRST_NAME, E.LAST_NAME, COUNT(*) as num_tasks
    FROM EMPLOYEE E JOIN
         TASK T
         ON E.EMPLOYEE_ID = T.TASK_ID
    GROUP BY E.EMPLOYEE_ID, E.FIRST_NAME, E.LAST_NAME
    HAVING COUNT(*) > 3; 

答案 1 :(得分:1)

在创建视图时,可以选择在视图名称之后提供一个列名称的括号列表,但是,该列表不应采用alias.column_name格式,您只需提供列名称即可。此外,如果确实提供了可选的列名列表,则定义视图的查询的投影(选择列表)在其投影中的列数应与列别名列表中的列数相同。

当前,您的视图定义存在以下问题:

  1. 列别名列表中有表别名(E.T.
  2. 查询投影中只有一列,而视图列别名列表中只有四个别名
  3. COUNT T.TASK_ID是无效的列表达式,count(t.task_id)是有效的
  4. 您在COUNT(T.TASK_ID)子句中使用WHERE,但这是WHERE条款中不允许的聚合函数。

答案 2 :(得分:0)

“计数”是一个函数。它需要带括号的参数:

...

AS SELECT COUNT(T.TASK_ID)

...