如何以最少的查询获得工资的总和/支出

时间:2017-10-09 07:01:03

标签: mysql

嗨,这是mySql中的sql语句。

任何正文都可以为以下内容建议最佳的mySql语句。

  

SELECT A.id,A.salary,A.salary + IFNULL((SELECT SUM(B.salary)FROM test_salary B WHERE B.id< A.id ORDER BY id DESC),0)AS tot FROM test_salary A

此查询运行了多少次? - 可用行数为表+ 1。

  

我想要这样的结果:   id salary tot   1 200 200   2 300 500   3 400 900   4 500 1400   5 600 2000   6 700 2700   7 800 3500   8 900 4400

  • 其中工资表只有id和工资字段。

1 个答案:

答案 0 :(得分:0)

目前尚不清楚你要在这里做什么,但以下内容至少在语法上是正确的。

SELECT A.id, A.salary, 
       A.salary+IFNULL((SELECT SUM(B.salary) FROM test_salary B WHERE B.id = a.id),0)
from a

根据您的编辑,我可以看到您的查询有效。子查询将针对主查询中遇到的每一行运行。另一种方法是使用变量

select a.id,a.salary,
         @tot := @tot + a.salary as tot
from test_salary a, (select @tot:=0) t; 

我建议你将你的查询与性能进行比较。