2013-05-30 6 views
0

Я использую Oracle Developer разработчика oracle. Начнем с того, у меня есть эта таблица:oracle sql select query

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 сотрудника? Если вы говорите, что не хотите считать сотрудника, и вы хотите только подсчитать других сотрудников в отделе 'count (*) over (partition by department_id) - 1' будет действительным –

+0

SO отдел имеет 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, как этот;

Нормальный JOIN или INNER JOIN бы только вернуть пользователей, которые на самом деле имеют, по меньшей мере, один коллега, LEFT JOIN возвращает пользователей, даже если они не имеют своего коллегу, чтобы мы могли считать их.

An SQLfiddle to test with.