我可以知道相关子查询的含义吗?

时间:2019-08-11 10:30:25

标签: mysql sql database group-by correlated-subquery

我有一个名为sql_hr的数据库,其中有一个表employees

以下是.sql文件的内容,该文件创建具有表sql_hr的{​​{1}}数据库:

employees

好的,现在显示表DROP DATABASE IF EXISTS `sql_hr`; CREATE DATABASE `sql_hr`; USE `sql_hr`; CREATE TABLE `employees` ( `employee_id` int(11) NOT NULL, `first_name` varchar(50) NOT NULL, `last_name` varchar(50) NOT NULL, `job_title` varchar(50) NOT NULL, `salary` int(11) NOT NULL, `reports_to` int(11) DEFAULT NULL, `office_id` int(11) NOT NULL, PRIMARY KEY (`employee_id`), KEY `fk_employees_offices_idx` (`office_id`), KEY `fk_employees_employees_idx` (`reports_to`), CONSTRAINT `fk_employees_managers` FOREIGN KEY (`reports_to`) REFERENCES `employees` (`employee_id`), CONSTRAINT `fk_employees_offices` FOREIGN KEY (`office_id`) REFERENCES `offices` (`office_id`) ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci; INSERT INTO `employees` VALUES (37270,'Yovonnda','Magrannell','Executive Secretary',63996,NULL,10); INSERT INTO `employees` VALUES (33391,'D\'arcy','Nortunen','Account Executive',62871,37270,1); INSERT INTO `employees` VALUES (37851,'Sayer','Matterson','Statistician III',98926,37270,1); INSERT INTO `employees` VALUES (40448,'Mindy','Crissil','Staff Scientist',94860,37270,1); INSERT INTO `employees` VALUES (56274,'Keriann','Alloisi','VP Marketing',110150,37270,1); INSERT INTO `employees` VALUES (63196,'Alaster','Scutchin','Assistant Professor',32179,37270,2); INSERT INTO `employees` VALUES (67009,'North','de Clerc','VP Product Management',114257,37270,2); INSERT INTO `employees` VALUES (67370,'Elladine','Rising','Social Worker',96767,37270,2); INSERT INTO `employees` VALUES (68249,'Nisse','Voysey','Financial Advisor',52832,37270,2); INSERT INTO `employees` VALUES (72540,'Guthrey','Iacopetti','Office Assistant I',117690,37270,3); INSERT INTO `employees` VALUES (72913,'Kass','Hefferan','Computer Systems Analyst IV',96401,37270,3); INSERT INTO `employees` VALUES (75900,'Virge','Goodrum','Information Systems Manager',54578,37270,3); INSERT INTO `employees` VALUES (76196,'Mirilla','Janowski','Cost Accountant',119241,37270,3); INSERT INTO `employees` VALUES (80529,'Lynde','Aronson','Junior Executive',77182,37270,4); INSERT INTO `employees` VALUES (80679,'Mildrid','Sokale','Geologist II',67987,37270,4); INSERT INTO `employees` VALUES (84791,'Hazel','Tarbert','General Manager',93760,37270,4); INSERT INTO `employees` VALUES (95213,'Cole','Kesterton','Pharmacist',86119,37270,4); INSERT INTO `employees` VALUES (96513,'Theresa','Binney','Food Chemist',47354,37270,5); INSERT INTO `employees` VALUES (98374,'Estrellita','Daleman','Staff Accountant IV',70187,37270,5); INSERT INTO `employees` VALUES (115357,'Ivy','Fearey','Structural Engineer',92710,37270,5);

employees

<code>employees</code>

我想编写一个查询,以基于这样的条件,即从那些拥有USE sql_hr; SELECT * FROM employees; 的每组员工中仅返回一些客户,这些条件是这些客户的office_id应该比拥有该客户的所有客户的平均工资高特定的office_id。

现在,我想共享两个查询(1)和(2),在查询后显示输出:

(1):

salary

**(1)**

(2):

SELECT
    employee_id,
    first_name,
    salary
FROM employees e

WHERE salary> (
    SELECT AVG(salary)
    FROM employees
    WHERE office_id= e.office_id);

**(2)**

我以为上面两个查询的意思是一样的。但是事实证明,根据问题,查询(1)是正确的,但(2)不是。为什么查询(2)与查询(1)不同?

1 个答案:

答案 0 :(得分:2)

第一个查询返回薪水高于其所属ReactDOM.render(React.createElement(TestCom, {}), document.getElementById('matches')); 的平均薪水的员工。
这是这种情况的作用:

office_id

第二个查询返回薪水高于所有平均薪资的员工,这意味着:薪水高于所有WHERE salary> ( SELECT AVG(salary) FROM employees WHERE office_id= e.office_id); 个职位的最高平均薪资
这是条件:

office_id

子查询:

WHERE salary> ALL(
    SELECT AVG(salary)
    FROM employees
    GROUP BY office_id);

返回所有SELECT AVG(salary) FROM employees GROUP BY office_id 的所有平均值。
因此,当您希望薪水高于所有薪金时,您的意思是大于全部薪金

相关问题