2013-05-30 77 views
0

我正在使用oracle的SQL Developer。首先,我有这个表:oracle sql select查询

Name   Null  Type   
-------------- -------- ------------ 
EMPLOYEE_ID NOT NULL NUMBER(6)  
FIRST_NAME    VARCHAR2(20) 
LAST_NAME  NOT NULL VARCHAR2(25) 
DEPARTMENT_ID   NUMBER(4) 

我想为每一个员工表现出了他的名字和他的 部的同事的数量。这是我走到这一步:

select first_name, department_id, count(employee_id) 
from employees 
group by department_id; 

这会产生一个错误:

ORA-00979: not a GROUP BY expression 
00979. 00000 - "not a GROUP BY expression" 

我真的需要一些帮助。我是一个初学者,所以任何建议都是值得欢迎的。

更新:因此,对于每个员工,我想显示来自同一部门的同事人数和他的姓名。我已经更新了这个问题。

+0

[查询语法没有问题](http://sqlfiddle.com/#!4/7b922/1)。你确定缓冲区中没有别的东西可以随意执行吗?此外,我不确定SQL开发人员,但尝试没有终止';'。 –

+0

我更新了问题。 – Teo

+0

你还在听到语法错误,还是现在有关新功能的问题? –

回答

3

您发布不会产生错误的查询您表示

SQL> create table employees(
    2 employee_id number primary key, 
    3 first_name varchar2(20), 
    4 last_name varchar2(25), 
    5 department_id number 
    6 ); 

Table created. 

SQL> select first_name, department_id, count(employee_id) 
    2 from employees 
    3 group by first_name, department_id; 

no rows selected 

但是,它也将不会产生你似乎表明你想要的结果。从你的描述,似乎你想要的东西像

select first_name, 
     last_name, 
     count(*) over (partition by department_id) - 1 num_colleagues_in_department 
    from employees 
+0

是的,但我需要他的同事人数,这将是-1,我应该在哪里插入-1? – Teo

+0

@Theo - 我不确定我了解什么-1代表。一个部门如何拥有-1名员工?如果你说你不想统计雇员,而你只想统计部门中的其他雇员数量(*)(由department_id分区) - 1将是有效的 –

+0

因此,某个部门有x个数字的员工。但员工Y拥有x-1个同事,对吧?我们必须将他排除在计数之外,因为我需要每个员工的同事人数。 – Teo

0
select a.firstname, a.department_id, 
(select count(employee_id) from employees b where b.department_id = a.department_id and b.employee_id <> a.employee_id) as total_in_dept 
from employees a 

这大约是我怎么会做它。这是一个子查询。 http://www.techonthenet.com/oracle/subqueries.php

0

除此之外,您可以使用子查询(如许多其他答案)或LEFT JOIN这样做;

正常JOININNER JOIN只会返回实际上至少有一个同事的用户,一个LEFT JOIN回报用户,即使他们没有一个同事,所以我们可以指望他们。

An SQLfiddle to test with