选择所有平均值小于指定值的条目

时间:2019-10-17 08:25:20

标签: mysql sql aggregate average

我有两个SQL表,第一个称为雇员表,它包含雇员名称,唯一的雇员ID和公司的部门名称。

示例:

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

第二个叫薪水。它拥有相同的员工姓名和相同的员工ID,以及每个员工的薪水。

示例:

    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 个答案:

答案 0 :(得分:1)

这是一个联接选项。我们可以按部门进行汇总,然后断言给定部门的平均工资低于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;

答案 1 :(得分:0)

您可以在下面尝试-

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