2013-05-30 76 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