diff --git "a/\345\210\230\346\226\207\350\276\211/CASE-2024-09-29.md" "b/\345\210\230\346\226\207\350\276\211/CASE-2024-09-29.md" new file mode 100644 index 0000000000000000000000000000000000000000..ce972b646432e0bf27dd18b6703ba75823f7d6a8 --- /dev/null +++ "b/\345\210\230\346\226\207\350\276\211/CASE-2024-09-29.md" @@ -0,0 +1,52 @@ +# CASE + +```sql +### 2. :根据薪资范围增加奖金,使用 `CASE` 语句和循环 + +设计一个存储过程,遍历所有员工,根据薪资范围增加奖金: + +- 薪资 < 10000: 奖金增加 100 +- 薪资在 10000 到 20000 之间: 奖金增加 200 +- 薪资 > 30000 不加 + +最后打印几个员工增加了奖金a +DROP PROCEDURE IF EXISTS addcomm; + +CREATE PROCEDURE addcomm() +BEGIN +SELECT count(u.增加了奖金) 几个员工增加了奖金 FROM (SELECT ename,sal,case WHEN sal<10000 THEN sal+100 WHEN sal BETWEEN 10000 AND 20000 THEN sal+200 WHEN sal>30000 THEN sal END AS 增加了奖金 FROM emp) u ; +END; +CALL addcomm; + + +3. 分组统计全公司各部门的平均工资,人数,及10000以下、10001-20000、20001-30000、30001以上的人数 +SELECT AVG(sal),CASE + WHEN sal<10000 THEN '1' + WHEN sal BETWEEN 10001 AND 20000 THEN '2' + WHEN sal BETWEEN 20001 AND 30000 THEN '3' + WHEN sal>30001 THEN '4' + END AS commm + FROM emp GROUP BY commm + ----------------------------------------------- +DROP PROCEDURE IF EXISTS addcomm; + +CREATE PROCEDURE addcomm() +BEGIN + SELECT CASE WHEN ur.commm = '1' THEN '10000' + WHEN ur.commm = '2' THEN '10001-20000' + WHEN ur.commm = '3' THEN '20001-30000' + WHEN ur.commm = '4' THEN '30001以上' +END AS A分类 , +AVG(ur.sal) B平均工资,COUNT(ur.commm) AS C人数 +FROM (SELECT *,CASE + WHEN sal<10000 THEN '1' + WHEN sal BETWEEN 10001 AND 20000 THEN '2' + WHEN sal BETWEEN 20001 AND 30000 THEN '3' + WHEN sal>30001 THEN '4' + END AS commm + FROM emp em) ur GROUP BY ur.commm; +END; + +CALL addcomm; +``` +