首页 > 数据库技术 > 详细

SQL基础之实现累加值

时间:2020-12-06 00:23:53      阅读:38      评论:0      收藏:0      [点我收藏+]

现有表 salary,如图1:

实现需求:按员工的编号升序生成一列累计值, 结果按累计值升序排序,实现结果如图2。

技术分享图片                  技术分享图片

                                图1.表 salary                                                                  图2.需要实现的结果

建表语句如下:

CREATE TABLE `salary` (
  `empno` int NOT NULL,
  `ename` varchar(255) DEFAULT NULL,
  `salary` decimal(10,2) DEFAULT NULL,
  PRIMARY KEY (`empno`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

插入数据:

INSERT INTO salary(empno,ename,salary) VALUES(7934,MILLER,1300.00);
INSERT INTO salary(empno,ename,salary) VALUES(7902,FORD,3000.00);
INSERT INTO salary(empno,ename,salary) VALUES(7900,JAMES,950.00);
INSERT INTO salary(empno,ename,salary) VALUES(7876,ADAMS,1100.00);
INSERT INTO salary(empno,ename,salary) VALUES(7844,TURNER,1500.00);
INSERT INTO salary(empno,ename,salary) VALUES(7839,KING,5000.00);
INSERT INTO salary(empno,ename,salary) VALUES(7788,SCOTT,3000.00);
INSERT INTO salary(empno,ename,salary) VALUES(7782,CLARK,2450.00);
INSERT INTO salary(empno,ename,salary) VALUES(7698,BLAKE,2850.00);
INSERT INTO salary(empno,ename,salary) VALUES(7654,MARTIN,1250.00);
INSERT INTO salary(empno,ename,salary) VALUES(7566,JONES,2975.00);
INSERT INTO salary(empno,ename,salary) VALUES(7521,WARD,1250.00);
INSERT INTO salary(empno,ename,salary) VALUES(7499,ALLEN,1600.00);
INSERT INTO salary(empno,ename,salary) VALUES(7369,SMITH,800.00);

解法一:使用窗口函数

SELECT empno,ename,salary,sum(salary) over (ORDER BY empno) as sum FROM salary;

解法二:使用变量实现累加

set @sum :=0;
SELECT empno,ename,salary,(@sum := @sum + salary) as sum FROM salary ORDER BY empno;

解法三:使用标量子查询

SELECT b.empno,b.ename,b.salary,
(SELECT sum(a.salary) FROM salary a WHERE a.empno <= b.empno) as sum 
FROM salary b;

 

SQL基础之实现累加值

原文:https://www.cnblogs.com/yangms/p/14091731.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!