我有两个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);
答案 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)
您可以在下面尝试-
SELECT department,avg(salary)
FROM employee a
inner join salaries b on a.id=b.emp_id
group by department
having avg(salary)<203