我有一张这样的桌子:
表格:员工
EmpId: INTEGER NOT NULL
DeptId: INTEGER NOT NULL
Name: Char(40) NOT NULL
Age: INTEGER NOT NULL
Salary: INTEGER NOT NULL
表格:部门
DeptId: INTEGER NOT NULL
Name: Char(40) NOT NULL
Rank: INTEGER NULL
我需要找到的查询是:-
a)通过降低该部门所有雇员的平均年龄的顺序对所有部门进行排名,然后相应地更新排名列。因此,平均雇员年龄最高的部门应排名1,平均雇员年龄第二高的部门应排名2,依此类推。
如果多个部门的平均雇员年龄相同,则应按唯一的DeptId对其进行排名,不应更新没有任何雇员的部门职级。
b)列出部门名称以及该部门的总预算。总预算简单定义为该部门员工薪金的总和。如果该部门没有任何员工,则其总和应为0。
c)SQL查询以输出所有部门的名称,以使该部门的平均工资大于10,000,000
答案 0 :(得分:0)
我已经创建了用于运行查询的临时表和数据
if(self.ShadowLayerCard == nil){
let shadowLayer = CAShapeLayer.init()
self.ShadowLayerCard = shadowLayer
// here I have my code to add the shadowLayer and other parameters of the shadow...
}
下面是满足您要求的查询
a)
CREATE TABLE #Employee(
EmpId INTEGER NOT NULL,
DeptId INTEGER NOT NULL,
Name Char(40) NOT NULL,
Age INTEGER NOT NULL,
Salary INTEGER NOT NULL
);
CREATE TABLE #Department(
DeptId INTEGER NOT NULL,
Name Char(40) NOT NULL,
Rank INTEGER NULL
);
INSERT INTO #Employee VALUES(1,1,'A',34,9000000),
(2,2,'B',25,450000),
(3,1,'C',45,600000),
(4,1,'D',23,340000),
(5,2,'E',21,580000),
(6,3,'F',26,7500000),
(7,1,'G',27,650000),
(8,2,'H',28,410000),
(9,1,'I',29,120000),
(10,2,'J',54,150000),
(11,3,'I',65,1500000);
INSERT INTO #Department (DeptId,Name) VALUES(1,'Dept 1'),
(2,'Dept 2'),
(3,'Dept 3');
b)
UPDATE #Department SET RANK=a.Rank
FROM (SELECT DeptId,AVG(Age) AS 'AvgAge',ROW_NUMBER() OVER (ORDER BY AVG(AGE)DESC,DeptId ASC) AS 'Rank'
FROM #Employee GROUP BY DeptId)a
WHERE #Department.DeptId=a.DeptId
c)
SELECT d.Name,SUM(e.Salary) AS 'Total Budget'
FROM #Employee e JOIN #Department d
ON e.DeptId=d.DeptId
GROUP BY d.Name