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

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

【讨论】:

以上是关于选择平均值小于指定值的所有条目的主要内容,如果未能解决你的问题,请参考以下文章

逐列选择值的平均值

最大相关 - 最小冗余(mRMR)特征选择

[ jquery 选择器 :lt(index) ] 此方法选取匹配小于指定索引值的所有元素

TSQL - 列中所有非零值的平均值

最后 10 行的平均结果

计算第一个数字相似的所有元组值的平均值