选择平均值小于指定值的所有条目
Posted
技术标签:
【中文标题】选择平均值小于指定值的所有条目【英文标题】:Select all entries where average is less than specified value 【发布时间】:2019-10-17 08:25:20 【问题描述】:我有两个 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
【问题讨论】:
请注意,您不会将 emp_name 存储在薪金表中。事实上,您可能根本就没有单独的薪水表。 【参考方案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;
【讨论】:
【参考方案2】:你可以试试下面-
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
【讨论】:
以上是关于选择平均值小于指定值的所有条目的主要内容,如果未能解决你的问题,请参考以下文章