Выберите все записи, где среднее значение меньше указанного значения - PullRequest
0 голосов
/ 17 октября 2019

У меня есть две таблицы SQL. Первая называется «сотрудники» и содержит имена сотрудников, уникальные идентификаторы сотрудников и названия отделов компании.

Образец:

id  name    department
1   robert  engineering
2   muhammad    sales
3   john    engineering
4   steve   engineering
5   recardo engineering
6   ariel   human-resource
7   lena    human-resource
8   lucy    customer-service
9   barbara testing
10  eli testing

Второй называется зарплата. Он содержит одинаковые имена сотрудников и идентичные идентификаторы сотрудников - и зарплаты для каждого сотрудника.

Пример:

    emp_id  emp_name    salary
1   robert  100
2   muhammad    100
3   john    200
4   steve   200
5   recardo 250
6   riel    250
7   lena    300
8   lucy    100
9   barbara 280
10  eli 265

В компании 10 сотрудников, поэтому в обеих таблицах по 10 строк.

Как напечатать каждый отдел, в котором средняя зарплата на одного сотрудника ниже, чем203 доллара?

DDL и одна и та же скрипка

CREATE TABLE `employee` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `department` varchar(255) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `employee` (`id`, `name`, `department`) VALUES
(1, 'robert', 'engineering'),
(2, 'muhammad', 'sales'),
(3, 'john', 'engineering'),
(4, 'steve', 'engineering'),
(5, 'recardo', 'engineering'),
(6, 'ariel', 'human-resource'),
(7, 'lena', 'human-resource'),
(8, 'lucy', 'customer-service'),
(9, 'barbara', 'testing'),
(10, 'eli', 'testing');

CREATE TABLE `salaries` (
  `emp_id` int(11) NOT NULL,
  `emp_name` varchar(200) NOT NULL,
  `salary` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO `salaries` (`emp_id`, `emp_name`, `salary`) VALUES
(1, 'robert', 100),
(2, 'muhammad', 100),
(3, 'john', 200),
(4, 'steve', 200),
(5, 'recardo', 250),
(6, 'riel', 250),
(7, 'lena', 300),
(8, 'lucy', 100),
(9, 'barbara', 280),
(10, 'eli', 265);

http://sqlfiddle.com/#!9/1c33f0/2/1

Ответы [ 2 ]

1 голос
/ 17 октября 2019

Вот вариант соединения. Мы можем агрегировать данные по департаментам, а затем утверждать, что средняя зарплата данного департамента будет меньше $ 203.

SELECT
    d.department
FROM departments d
INNER JOIN salaries s
    ON d.id = s.emp_id
GROUP BY
    d.department
HAVING
    AVG(s.salary) < 203;
0 голосов
/ 17 октября 2019

Вы можете попробовать ниже -

DEMO

SELECT department,avg(salary)
FROM employee a
inner join salaries b on a.id=b.emp_id
group by department
having avg(salary)<203
...