【问题标题】:SQL AVG Salary recursive QuerySQL AVG 工资递归查询
【发布时间】:2017-01-07 19:27:34
【问题描述】:

在第一个查询中,我得到了领导其他员工的员工 在第二个中,我想获得收入超过平均水平的员工的平均工资。但我希望将两者结合起来,让经理的薪水是为他们工作的员工平均薪水的两倍以上。

SELECT   c.EmpID,c.name,c.gender,c.salary,c.supervisorFK,c.branchFK,c.position
FROM     staff c  INNER JOIN staff u ON c.EmpID = u.supervisorFk
GROUP BY c.EmpID,c.name,c.gender, c.salary, c.branchFK,c.supervisorFK,c.position


select name, salary, avg_salary
from staff
join (select avg(salary) avg_salary from staff) x
  on salary > avg_salary

我试过了:

SELECT   c.EmpID,c.name,c.gender,c.salary,c.supervisorFK,c.branchFK,c.position
FROM     staff c  INNER JOIN staff u ON c.EmpID = u.supervisorFk
 join (select avg(salary) avg_salary from staff) x
  on  c.salary*2 > avg_salary
GROUP BY c.EmpID,c.name,c.gender, c.salary, c.branchFK,c.supervisorFK,c.position

我得到了 31 次命中,这是不可能的。错误在哪里? 我找不到任何相关的问题。我从其他问题中得到的一些问题。 谢谢

源数据:

insert into Staff values ( 1, 'Robert King'      ,'M', 143000.0,NULL, 'B002', 'Director');
insert into Staff values ( 2, 'Rafael McDonalds' ,'M',  72000.0, 1,'B001', 'Manager');
insert into Staff values ( 3, 'John White'       ,'M',  60000.0, 1,'B003', 'Manager');
insert into Staff values ( 4, 'Susan Brand'      ,'F',  55000.0, 1,'B004', 'Manager');
insert into Staff values ( 5, 'Cathy Brown'      ,'F',  32000.0, 2,'B001', 'Supervisor');
insert into Staff values ( 6, 'Claire Dujeune'   ,'F',  79000.0, 1,'B010', 'Manager');
insert into Staff values ( 7, 'Patty Summer'     ,'F',  23000.0, 2,'B001', 'Supervisor');
insert into Staff values ( 8, 'Mary Fleming'     ,'F',  43000.0, 1,'B011', 'Manager');
insert into Staff values (10, 'Anne Beech'       ,'F',  26000.0, 5,'B001', 'Assistant');
insert into Staff values (12, 'Paul Coplien'     ,'M',  27000.0, 3,'B003', 'Supervisor');
insert into Staff values (13, 'David Ford'       ,'M',  41000.0, 1,'B012', 'Manager');
insert into Staff values (14, 'Mary Howe'        ,'F',  55000.0, 1,'B005', 'Manager');
insert into Staff values (15, 'Julie Lee'        ,'F',  34000.0, 3,'B003', 'Supervisor');
insert into Staff values (16, 'Aaron Young'      ,'M',  74000.0, 1,'B013', 'Manager');
insert into Staff values (17, 'Albert Thomson'   ,'M',  25000.0,13,'B012', 'Supervisor');
insert into Staff values (21, 'Alexander Reynolds','M', 37000.0, 5,'B001', 'Assistant');
insert into Staff values (18, 'Christine McDonalds','F',38000.0, 4,'B004', 'Supervisor');
insert into Staff values (19, 'Elisa Pinkerton'  ,'F',  36000.0,16,'B013', 'Supervisor');
insert into Staff values (20, 'Eric Montgomery'  ,'M',  33000.0, 7,'B001', 'Assistant');
insert into Staff values (22, 'Edward Robinson'  ,'M',  28000.0, 7,'B001', 'Assistant');
insert into Staff values (23, 'Jesse Owens'      ,'M',  34000.0, 4,'B004', 'Supervisor');
insert into Staff values (25, 'Johnatan Hunter'  ,'M',  45000.0, 1,'B014', 'Manager');
insert into Staff values (26, 'Lenita Kennedy'   ,'F',  56000.0, 1,'B009', 'Manager');
insert into Staff values (27, 'Lisa Miller'      ,'F',  34000.0,25,'B014', 'Supervisor');
insert into Staff values (28, 'Lilly Jennings'   ,'F',  36000.0,14,'B005', 'Supervisor');
insert into Staff values (29, 'Rafaela Johnson'  ,'F',  23000.0,12,'B003', 'Assistant');
insert into Staff values (32, 'Harry Anderson'   ,'M',  40000.0,12,'B003', 'Assistant');
insert into Staff values (33, 'George Bailey'    ,'M',  73000.0, 1,'B006', 'Manager');
insert into Staff values (34, 'Salomon Beckett'  ,'M',  46000.0, 1,'B008', 'Manager');
insert into Staff values (35, 'Susan Armstrong'  ,'F',  28000.0,15,'B003', 'Assistant');
insert into Staff values (36, 'Rosa Hemingway'   ,'F',  30000.0,15,'B003', 'Assistant');
insert into Staff values (37, 'Martha McDonalds' ,'F',  31000.0,15,'B003', 'Assistant');
insert into Staff values (38, 'Anna-Isabell Green','F', 32000.0,33,'B006', 'Supervisor');
insert into Staff values (39, 'Tina Hall-Becker' ,'F',  34000.0,18,'B004', 'Assistant');
insert into Staff values (40, 'Thomas Harrison'  ,'M',  42000.0, 1,'B007', 'Manager');
insert into Staff values (42, 'Winston Hughes'   ,'M',  22000.0,40,'B007', 'Supervisor');
insert into Staff values (44, 'Walter Jefferson' ,'M',  23000.0,18,'B004', 'Assistant');
insert into Staff values (45, 'Zara Newton'      ,'F',  24000.0,23,'B004', 'Assistant');
insert into Staff values (46, 'Nina McDonalds'   ,'F',  25000.0,23,'B004', 'Assistant');
insert into Staff values (48, 'Carol Moore'      ,'M',  27000.0,40,'B007', 'Supervisor');
insert into Staff values (51, 'Alexander Porter' ,'M',  29000.0,17,'B012', 'Assistant');
insert into Staff values (52, 'Maria Quasimodo'  ,'M',  30000.0,17,'B012', 'Assistant');
insert into Staff values (53, 'Bertrand Russel'  ,'M',  31000.0,34,'B008', 'Supervisor');
insert into Staff values (54, 'Ashley Parker'    ,'M',  25500.0,28,'B005', 'Assistant');
insert into Staff values (55, 'John Stuart'      ,'M',  23500.0,28,'B005', 'Assistant');
insert into Staff values (56, 'Ruth Sanderss'    ,'F',  27700.0,19,'B013', 'Assistant');
insert into Staff values (57, 'Rafael Smith'     ,'M',  32000.0,19,'B013', 'Assistant');
insert into Staff values (58, 'Viola Rutherford' ,'F',  21000.0,27,'B014', 'Assistant');
insert into Staff values (59, 'Sammy Churchill'  ,'M',  22000.0,27,'B014', 'Assistant');
insert into Staff values (60, 'Miriam Thorne'    ,'F',  26000.0,27,'B014', 'Assistant');
insert into Staff values (61, 'Sally Thatcher'   ,'F',  36000.0,34,'B008', 'Supervisor');
insert into Staff values (62, 'Larry Escott'     ,'M',  33000.0,26,'B009', 'Supervisor');
insert into Staff values (63, 'William Spencer'  ,'M',  32000.0, 6,'B010', 'Supervisor');
insert into Staff values (64, 'Diana Ashley-Bell','F',  38000.0, 8,'B011', 'Supervisor');
insert into Staff values (65, 'Audrey Thorne'    ,'F',  25000.0,62,'B009', 'Assistant');
insert into Staff values (66, 'Paula Burns'      ,'F',  24000.0,62,'B002', 'Assistant');
insert into Staff values (67, 'Amanda Wallis'    ,'F',  23000.0,38,'B006', 'Assistant');
insert into Staff values (68, 'Patty Stokes'     ,'F',  22000.0,53,'B008', 'Assistant');
insert into Staff values (69, 'Holly Fields'     ,'F',  21500.0,53,'B008', 'Assistant');
insert into Staff values (70, 'Martha McCulloch' ,'F',  26000.0,61,'B008', 'Assistant');
insert into Staff values (71, 'Maurin Best'      ,'F',  22500.0,42,'B007', 'Assistant');
insert into Staff values (72, 'Martha McDonalds' ,'F',  23500.0,27,'B014', 'Assistant');
insert into Staff values (73, 'Barrigan' ,NULL,  23500.0,27,'B013', 'Assistant');
insert into Staff values (47, 'Naomi Campell'    ,'F',  26000.0,63,'B010', 'Assistant');
insert into Staff values (49, 'Tony McDonalds'   ,'M',  28000.0,63,'B010', 'Assistant');
insert into Staff values (50, 'Margret McElroy'  ,'F',  29000.0,64,'B011', 'Assistant');
insert into Staff values ( 9, 'Carl Maier'       ,'M',  31000.0,64,'B011', 'Assistant');

创建表 STaff:

CREATE TABLE Staff (
EmpID int,
name varchar(30) NOT NULL,
gender char(1)  NULL
CHECK (gender in ('M','F')),
salary decimal(7,1) NOT NULL,
supervisorFK int NULL,
branchFK char(4) NOT NULL,
position char(10)
CHECK (position in ('Director','Manager','Supervisor','Assistant')),

PRIMARY KEY (EmpID)
);

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。
  • 创建表格的代码会很好
  • 添加了建表代码

标签: sql sql-server-2008 average


【解决方案1】:

您正在选择收入超过平均水平一半的经理。

on  c.salary*2 > avg_salary

应该是:

on  c.salary/2 > avg_salary

或者

on  c.salary > avg_salary * 2

【讨论】:

  • 谢谢,太好了,我忙于查询语法,只是忘了检查查询背后的逻辑:)
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2020-11-27
  • 2015-07-13
  • 2014-12-19
  • 2012-12-05
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多