创建工资差额表,表名为diffsal,表格如下 Id Type Avgsal 1 工资排名前三名平均工资 2 所有员工平均工资 3 工资排名后三名平均工资 根据diffsal表,创建触发器,实现如下内容:如果调整emp表中的工资,便级联更新diffsal表中Avgsal列中的值。
时间: 2024-02-27 12:56:54 浏览: 70
Oracle存储过程及程序包
好的,根据您的要求,我来给您提供一下 SQL 代码:
首先,创建一个 diffsal 表:
```sql
CREATE TABLE diffsal (
Id INT NOT NULL,
Type VARCHAR(50) NOT NULL,
Avgsal DECIMAL(10, 2) NOT NULL,
PRIMARY KEY (Id)
);
```
然后,我们创建一个触发器,实现当 emp 表中的工资被修改时,级联更新 diffsal 表中 Avgsal 列的值:
```sql
CREATE TRIGGER update_diffsal_avgsal
AFTER UPDATE ON emp
FOR EACH ROW
BEGIN
-- 更新工资排名前三名平均工资
UPDATE diffsal
SET Avgsal = (
SELECT AVG(salary)
FROM (
SELECT salary
FROM emp
ORDER BY salary DESC
LIMIT 3
) AS top_three
)
WHERE Id = 1;
-- 更新所有员工平均工资
UPDATE diffsal
SET Avgsal = (
SELECT AVG(salary)
FROM emp
)
WHERE Id = 2;
-- 更新工资排名后三名平均工资
UPDATE diffsal
SET Avgsal = (
SELECT AVG(salary)
FROM (
SELECT salary
FROM emp
ORDER BY salary ASC
LIMIT 3
) AS bottom_three
)
WHERE Id = 3;
END;
```
以上就是实现您要求的触发器的 SQL 代码。当您在 emp 表中修改工资时,触发器会自动更新 diffsal 表中 Avgsal 列的值。
阅读全文