2014-01-16 4 views
0

У меня есть 2 таблицы:Дополнительный столбец в агрегатной функции

EMP таблица (таблица сотрудников):

CREATE TABLE EMP 
(
"ID" NUMBER, 
"DEPT_ID" NUMBER, 
"NAME" VARCHAR2(30), 
PRIMARY KEY ("ID") ENABLE, 
FOREIGN KEY ("DEPT_ID") REFERENCES DEPARTMENT ("ID") ENABLE 
); 

и DEPARTMENT стол:

CREATE TABLE DEPARTMENT 
(
"ID" NUMBER, 
"NAME" VARCHAR2(30), 
PRIMARY KEY ("ID") 
); 

Я хочу написать запрос, который будет показан

DEPARTMENT.ID | DEPARMTENT.NAME | COUNT of employees working at the department. 

Я знаю, как показать id, но тогда я не могу показать имя. Как это сделать? ИМЯ ОТДЕЛЕНИЯ не уникальны, поэтому это усложняет это. Идентификатор отдела может быть нераспределенным для любого из сотрудников.

Запрос:

select d.id, count(e.id) 
from emp e 
right join department d 
on e.DEPT_ID = d.ID 
group by d.id 
order by d.id; 

показывает идентификатор и сосчитать, но без имени.

+0

Обновлено, в таком простом случае это не имеет значения:). – Pawel

ответ

4

Вы можете просто сделать это:

select d.id, d.name, count(e.id) 
from emp e 
right join department d 
on e.DEPT_ID = d.ID 
group by d.id, d.name 
order by d.id; 

Ее не осложненных department.name не является уникальным, поскольку сочетание department.id and department.name отличается ..

+0

Он работает, спасибо :). Я забыл, что несколько элементов могут быть в групповом предложении. – Pawel

+0

Просто обратите внимание, что в некоторых СУБД (например, PostgreSQL) вам не потребуется d.name в предложении group by, если d.id является первичным ключом. –

Смежные вопросы