因爲你沒有給你實際的表格描述你的表格。在我的答案我在我的COMPANY
數據庫使用Worker
:
在我Worker
表我有三個薪金領域同樣你field1
,field2
& field3
。實際的說明如下:
mysql> DESC `Worker`;
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| SSN | varchar(64) | NO | | NULL | |
| name | varchar(64) | YES | | NULL | |
| salary1 | int(11) | YES | | NULL | |
| salary2 | int(11) | YES | | NULL | |
| salary3 | int(11) | YES | | NULL | |
| Date | int(11) | YES | | NULL | |
+---------+-------------+------+-----+---------+-------+
6 rows in set (0.00 sec)
在這個表,我添加Date
爲整數(你可以有實際數據類型在MySQL中可用)。
假設表具有下列元組:在上面的查詢
mysql> SELECT * FROM `Worker` ORDER BY `Date` ASC ;
+-----+---------+---------+---------+---------+------+
| SSN | name | salary1 | salary2 | salary3 | Date |
+-----+---------+---------+---------+---------+------+
| 3 | Sumit | 250 | 150 | 100 | 2 |
| 4 | Harsh | 500 | -150 | 900 | 2 |
| 5 | ONE | 100 | 170 | 100 | 9 |
| 2 | Rahul | 300 | 15 | 30 | 10 |
| 1 | Grijesh | 200 | 100 | 50 | 13 |
| 7 | THREE | 1000 | 17 | -200 | 21 |
| 6 | TWO | 50 | -170 | 200 | 27 |
+-----+---------+---------+---------+---------+------+
ASC順序顯示,日期是在類型我說
想我需要刪除所有老工人的他們的工資總和只不過是N
(N
就像您的案例中的閾值TOT)。要選擇年齡較大的員工,我需要在Worker
表中同意(ASC)的順序。
你可以假設你是工人的公司的加入日期。所以舊是根據加入日期這是經驗
之前寫的選擇查詢我告訴你一些結果:
mysql> SELECT * , `salary1` + `salary2` + `salary3` AS TSalary
-> FROM `Worker` ORDER BY DATE ASC ;
+-----+---------+---------+---------+---------+------+---------+
| SSN | name | salary1 | salary2 | salary3 | Date | TSalary |
+-----+---------+---------+---------+---------+------+---------+
| 3 | Sumit | 250 | 150 | 100 | 2 | 500 |
| 4 | Harsh | 500 | -150 | 900 | 2 | 1250 |
| 5 | ONE | 100 | 170 | 100 | 9 | 370 |
| 2 | Rahul | 300 | 15 | 30 | 10 | 345 |
| 1 | Grijesh | 200 | 100 | 50 | 13 | 350 |
| 7 | THREE | 1000 | 17 | -200 | 21 | 817 |
| 6 | TWO | 50 | -170 | 200 | 27 | 80 |
+-----+---------+---------+---------+---------+------+---------+
7 rows in set (0.01 sec)
TSalary
是tatal工資工人得到他的工作就是三個總和的salary1
部件,salary2
& salary3
(如圖上述查詢)
我在每個級別(表中的每個子集)工資第總和:
+-----+---------+---------+---------+---------+------+---------+
| SSN | name | salary1 | salary2 | salary3 | Date | TSalary | SUM(TSalary) at
+-----+---------+---------+---------+---------+------+---------+ each level
| 3 | Sumit | 250 | 150 | 100 | 2 | 500 |500
| 4 | Harsh | 500 | -150 | 900 | 2 | 1250 |500 + 1250= 1750
| 5 | ONE | 100 | 170 | 100 | 9 | 370 |1750 + 370= 2120
| 2 | Rahul | 300 | 15 | 30 | 10 | 345 |2120 + 345= 2465
| 1 | Grijesh | 200 | 100 | 50 | 13 | 350 |2465 + 350= 2815
| 7 | THREE | 1000 | 17 | -200 | 21 | 817 |2815 + 817= 3632
| 6 | TWO | 50 | -170 | 200 | 27 | 80 |3632 + 80 = 3712
+-----+---------+---------+---------+---------+------+---------+
我已經寫了一個查詢選擇具有工資<= N
的總和老工人。
N = 1500
是例如低於:(如我計算上述我想兩個行應該選擇)
SELECT `ssn`, `name`, `salary1` , `salary2` , `salary3`
FROM (SELECT `ssn`,
`name`,
`salary1` ,
`salary2` ,
`salary3`,
(@total:[email protected]+ `salary1` + `salary2` + `salary3`) as TSalary
FROM `Worker`, (select @total:=0) t
ORDER BY `Date` ASC) AS `some_worker`
WHERE (TSalary -(`salary1` + `salary2` + `salary3`)) <= 1500;
+-----+-------+---------+---------+---------+
| ssn | name | salary1 | salary2 | salary3 |
+-----+-------+---------+---------+---------+
| 3 | Sumit | 250 | 150 | 100 |
| 4 | Harsh | 500 | -150 | 900 |
+-----+-------+---------+---------+---------+
2 rows in set (0.00 sec)
通知:只有兩個選擇,因爲包括第三裝置比N(=多1500) 。
現在假設N = 2000
:(,正如我上面所計算我想兩個行應選擇)
SELECT `ssn`, `name`, `salary1` , `salary2` , `salary3`
FROM (SELECT `ssn`,
`name`,
`salary1` ,
`salary2` ,
`salary3`,
(@total:[email protected]+ `salary1` + `salary2` + `salary3`) as TSalary
FROM `Worker`, (select @total:=0) t
ORDER BY `Date` ASC) AS `some_worker`
WHERE (TSalary -(`salary1` + `salary2` + `salary3`)) <= 2000;
+-----+-------+---------+---------+---------+
| ssn | name | salary1 | salary2 | salary3 |
+-----+-------+---------+---------+---------+
| 3 | Sumit | 250 | 150 | 100 |
| 4 | Harsh | 500 | -150 | 900 |
+-----+-------+---------+---------+---------+
| 5 | ONE | 100 | 170 | 100 |
+-----+-------+---------+---------+---------+
3 rows in set (0.00 sec)
此查詢工作正常在這個例子中,但可能是應爲長條桌,但這種單向你完成了你的工作。
試試吧!
另外,你的願望,你可以改變平等的條件外狀態(我對你的門限的定義有點混亂。如果你用一個例子問這可能是件好事)
有什麼'SUM的性質(field1,field2,field3)'跨日期記錄? – SparKot
查看本[問題:查詢:工資總額> 500的所有員工](http://dba.stackexchange.com/questions/33497/query-all-employee-with-sum-of-salary-500) –