我想解决的问题是:
列出所有薪资低于平均薪资的员工,并按金额列出。
问题表:
CREATE TABLE Staff
(`staffNo` varchar(4), `fName` varchar(5), `lName` varchar(5),
`position` varchar(10), `sex` varchar(1), `DOB` varchar(9),
`salary` int, `branchNo` varchar(4))
;
INSERT INTO Staff
(`staffNo`, `fName`, `lName`, `position`, `sex`, `DOB`, `salary`, `branchNo`)
VALUES
('SL21', 'John', 'White', 'Manager', 'M', '1-Oct-45', 30000, 'B005'),
('SG37', 'Ann', 'Beech', 'Assistant', 'F', '10-Nov-60', 12000, 'B003'),
('SG14', 'David', 'Ford', 'Supervisor', 'M', '24-Mar-58', 18000, 'B003'),
('SA9', 'Mary', 'Howe', 'Assistant', 'F', '19-Feb-70', 9000, 'B007'),
('SG5', 'Susan', 'Brand', 'Manager', 'F', '3-Jun-40', 24000, 'B003'),
('SL41', 'Julie', 'Lee', 'Assistant', 'F', '13-Jun-65', 9000, 'B005')
;我一直在研究的解决办法是:
SELECT s.staffNo, s.fName, s.lName, s.salary
FROM Staff s
WHERE s.salary < (SELECT AVG(s.salary) FROM *)
ORDER BY s.salary DESC;然而,这并不能回答问题的最后一节,即"...and列表多少“。
不过,我不得不把它合并成这样:
SELECT staffNo, fName, lName, salary, (30000-salary) as Average
FROM Staff
WHERE salary < (SELECT AVG(salary) FROM Staff)
ORDER BY salary DESC;但这只会带来一个错误..。
你能在这里提供什么帮助吗?
发布于 2014-08-23 08:20:47
加入一个返回平均薪资的子查询
SELECT staffNo, fName, lName, salary, avgSalary-salary AS salaryDiff, avgSalary
FROM Staff
JOIN (SELECT AVG(salary) AS avgSalary
FROM Staff) AS av
ON salary < avgSalary演示
https://stackoverflow.com/questions/25459861
复制相似问题