Oracle SQL-запрос с использованием предложения group by - PullRequest
1 голос
/ 01 января 2012

У меня есть две таблицы

CREATE TABLE DBTEST.EMP
(
  EMP_ID   NUMBER,
  NAME     VARCHAR2(20 BYTE),
  SALARY   NUMBER,
  DEPT_ID  NUMBER,
  LOC_ID   NUMBER
)

CREATE TABLE DBTEST.LOC
(
  LOC_ID       NUMBER,
  CODE         VARCHAR2(3 BYTE),
  DESCRIPTION  VARCHAR2(100 BYTE)
)

примеры данных

EMP_ID  NAME        SALARY  DEPT_ID LOC_ID
1       Timmins     180000  1       1
2       Lauchnor    180000  1       1
4       Anderson            4       1
11      Pitcher     116000  3       2
17      Hedrick     182000  3       2
25      Mandurino   182000  2       1
69      Frenzel     62000   4       3



LOC_ID  CODE    DESCRIPTION
1       UT      Utah
2       CA      California
3       EU      Europe

Я хочу перечислить сотрудников с зарплатой ниже среднего для их местоположения?Примечание: это группа на примере.

Надеюсь, вы понимаете это.

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 января 2012

Как насчет этого?

Select emp.*
  From DBTEST.EMP emp,
    (Select Avg(Salary) avg_salary, loc_id From DBTEST.EMP Group By LOC_ID) averages
  Where averages.loc_id = emp.loc_id
    And emp.salary < averages.avg_salary;

Это соответствует вашему требованию использования Group By, но если бы у меня был выбор, я бы обошелся без него, например:

Select *
  From DBTEST.EMP emp
  Where salary <
    (Select Avg(salary) From DBTEST.EMP emp2 Where emp2.loc_id = emp.loc_id);

Это было проверено, и оба запроса возвращают следующее:

"EMP_ID","NAME","SALARY","DEPT_ID","LOC_ID"
"2","Lauchnor","180000","1","1"
"1","Timmins","180000","1","1"
"11","Pitcher","116000","3","2"
0 голосов
/ 23 января 2015

Может быть проще использовать AVG() в качестве оконной функции (аналитическая функция в Oracle lingo) в этой ситуации:

SELECT * FROM (
    SELECT emp_id, name, salary
         , dept_id, loc_id
         , AVG(salary) OVER ( PARTITION BY loc_id ) AS avg_salary
      FROM emp
) WHERE salary < avg_salary;

См. Демонстрационную версию SQL Fiddle здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...