2013-02-14 123 views
0

我只需要大約SQL一點幫助查詢SQL子查詢多個值

這裏的情況

ID FIRST_NAME LAST_NAME START_DAT END_DATE SALARY  CITY  DESCRIPTION 
---- ---------- ---------- --------- --------- ---------- ---------- --------------- 
01 Jason  Martin  25-JUL-96 25-JUL-06 1234.56 Toronto Programmer 
02 Alison  Mathews 21-MAR-76 21-FEB-86 6661.78 Vancouver Tester 
03 James  Smith  12-DEC-78 15-MAR-90 6544.78 Vancouver Tester 
04 Celia  Rice  24-OCT-82 21-APR-99 2344.78 Vancouver Manager 
05 Robert  Black  15-JAN-84 08-AUG-98 2334.78 Vancouver Tester 
06 Linda  Green  30-JUL-87 04-JAN-96 4322.78 New York Tester 
07 David  Larry  31-DEC-90 12-FEB-98 7897.78 New York Manager 
08 James  Cat  17-SEP-96 15-APR-02 1232.78 Vancouver Tester 

8 rows selected. 

SQL> -- GROUP BY clause and AVG() function 

SQL> SELECT city, AVG(salary) 
2 FROM employee 
3 GROUP BY city; 


CITY AVG(SALARY) 
---------- ----------- 
New York 6110.28 

Toronto 1234.56 

Vancouver 3823.78 

問題是我不能找到一種方法來提取每個avg(salary)具有較高的薪水那些名字城市

例子:

溫哥華的3823.78 avg(salary)所以我應該得到的2人名稱:Alison和詹姆斯·貝科使用它們比紐約

avg(salary)較高的收入,現在我只去這個查詢,但不工作

select FIRST_NAME,SALARY,CITY 
from employee 
where SALARY > ( select avg(SALARY) 
        from employee 
        group by CITY 
       ); 

它告訴我,子查詢返回多個值

希望有人能幫我

回答

2

您的查詢返回多個值。將其限制爲一個值,你需要city條件:

select FIRST_NAME,SALARY,CITY 
from employee e 
where SALARY > (select avg(SALARY) 
       from employee e2 
       where e2.city = e.city 
       group by CITY); 

這就是所謂的相關子查詢。你也可以把它寫成一個連接,這是我將使用的語法。嚴格來說,group by CITY是不必要的,但我認爲它使得子查詢的意圖更清晰。

您可以改寫這是做一個連接:

select e.FIRST_NAME, e.SALARY, e.CITY 
from employee e join 
    (select city, avg(salary) as avgSalary 
     from employee 
     group by city 
    ) ec 
    on e.city = ec.city 
where e.salary > ec.avgSalary 

或者說,這將是我最喜歡的方式。 。 。

select e.FIRST_NAME, e.SALARY, e.CITY 
from (select e.*, 
      avg(salary) over (partition by city) as avgSalary 
     employee e 
    ) e 
where e.salary > e.avgSalary 
+0

連接不一定代替了共同相關的子查詢。 – 2013-02-14 13:38:25

+0

@a_horse_with_no_name。 。 。連接和分組可以替換許多相關的子查詢。並非全部,但大部分是你在實踐中看到的。 – 2013-02-14 13:45:42

+0

好兄弟第一個工作 - 其他2似乎很難:D tyvm – user2072161 2013-02-14 13:50:44