SQL SELECT查询从表中提取数据以计算总和

时间:2016-04-17 11:58:39

标签: sql oracle select

我在数据库中有四个表,我想要做的主要是列出员工编号,他们正在处理的任何项目的名称部门编号以及他们花在项目上的总工时。

我试图将这一切都作为单个SELECT语句执行,但是无法使其与Oracle SQL一起使用。我的最新尝试是

SELECT EMPLOYEE.E#, EMPLOYEE.NAME, SUM(WORKSON.HOURS)
FROM EMPLOYEE JOIN WORKSON ON EMPLOYEE.E#=WORKSON.E#
GROUP BY EMPLOYEE.E#;

哪个甚至不是完整的陈述,并给我错误:

ERROR at line 1:
ORA-00979: not a GROUP BY expression

我可以做些什么来完成声明,还包括部门编号以及我应该做什么?我应该使用加入吗?或者我应该在WHERE子句中包含另一个SELECT语句吗?

表格如下:

EMPLOYEE

SQL> SELECT * FROM EMPLOYEE;            

E#    NAME               DOB         S  SALARY SUPER    D#
----- ------------------ ----------- -- ------ -------- ---
00100 Albert             13-OCT-65   M   186.5
00110 Alvin              13-OCT-77   M   156.4 00100      1
00120 Alice              17-JUN-73   F   156.5 00100      2
00150 Bob                02-JUL-60   M   166.4 00100      3
00200 Carl               02-FEB-67   M   156.3 00100      4
00250 Douglass           14-APR-83   M   156.4 00100      5
00101 Peter              13-NOV-76   M    85.2 00110      1
00103 Ami                12-SEP-85   F    78.2 00110      1
00107 Wendy              12-SEP-88   F    68.2 00110      1
00109 Michael            12-SEP-90   M    58.2 00110      1
00125 Angela             20-NOV-90   F    56.4 00120      2
00105 Robert             15-JAN-86   M    66.2 00150      3
00136 Aban               15-JAN-90   M    55.3 00200      4
00187 Eadger             07-APR-86   M    76.5 00250      5

14 rows selected.

WORKSON

SQL> SELECT * FROM WORKSON;

E#    P#      HOURS
----- ------- -----
00110    1001    10
00101    1001    20
00150    1002    10
00105    1002    10
00105    1003    20
00105    1004    20
00250    1004    15
00187    1004    25
00105    1005    15

DEPARTMENT

SQL> SELECT * FROM DEPARTMENT;

D# DNAME              MANAG  MSDATE
-- ------------------ ------ ------------
 1 SALES              00110  02-JAN-12
 2 ACCOUNTING         00120  30-OCT-10
 3 GAMES              00150  01-MAR-08
 4 HUMAN RESOURCES    00200  02-JAN-13
 5 SPORTS             00250  10-MAY-10

PROJECT

SQL> SELECT * FROM PROJECT;

    P# PTITLE             SPONSOR                D#  BUDGET
------ --- -------------- ---------------------- --- -------
  1001 Computation        Microsoft               1    25000
  1002 Study methods      Education committee     3    15000
  1003 Racing car         Cloud Pty Ltd           3   225000
  1004 Football           Football club           5    35000
  1005 Swimming           Education committee     5   125000

非常感谢任何帮助。提前谢谢!

1 个答案:

答案 0 :(得分:2)

您首先找到每个员工的小时数,然后将其与主表一起加入。内联视图可以用于相同的。

SELECT EMPLOYEE.E#, EMPLOYEE.NAME, NVL(WORKSON_AGGR.TOTAL_HOURS,0)
FROM EMPLOYEE
  LEFT JOIN  (SELECT E#, SUM(HOURS) as TOTAL_HOURS
                FROM WORKSON
          GROUP BY E# ) WORKSON_AGGR
     ON (WORKSON_AGGR.E# = EMPLOYEE.E#)

现在,您可以轻松加入您的部门表。

SELECT 
     E.E#,
     E.NAME,
     NVL(WORKSON_AGGR.TOTAL_HOURS,0),
     D.DNAME
FROM EMPLOYEE E
  LEFT JOIN  (SELECT E#, SUM(HOURS) as TOTAL_HOURS
                FROM WORKSON
             GROUP BY E# ) WORKSON_AGGR
     ON (WORKSON_AGGR.E# = E.E#)
  JOIN DEPARTMENT D ON (D.D# = E.D#)