[英]Mysql query to subtract sum of a column in a table from a value in another table with clauses
公司里有員工,每個員工每個月都有自己的工資。 員工可以在一個月內多次從他的工資中借到一些錢。
需要顯示員工姓名、工資、上次借入的金額、借入的金額以及特定月份的每筆交易的工資中的剩余金額。
這些是我的表結構:
CREATE TABLE `employees`
(
`Employee_Id` Int NOT NULL AUTO_INCREMENT,
`Employeer_Name` Char(150) NOT NULL,
`Job` Varchar(100),
PRIMARY KEY (`Employee_Id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 1
ROW_FORMAT = Compact;
CREATE TABLE `Months`
(
`Month_Id` Int NOT NULL AUTO_INCREMENT,
`Month_Name` Varchar(100),
PRIMARY KEY (`Month_Id`),
UNIQUE `Month_Id` (`Month_Id`)
);
CREATE TABLE `Employees_Salary`
(
`Month_Id` Int NOT NULL,
`Employee_Id` Int NOT NULL,
`Salary` Decimal(10,2)
);
CREATE TABLE `salary_transaction`
(
`Salary_Transaction_Id` Int NOT NULL AUTO_INCREMENT,
`money_amount` Decimal(10,2) NOT NULL,
`salary_transaction_date` Date NOT NULL,
`Month_Id` Int,
`Employee_Id` Int,
PRIMARY KEY (`Salary_Transaction_Id`)
) ENGINE = InnoDB
AUTO_INCREMENT = 1
ROW_FORMAT = Compact;
ALTER TABLE `Employees_Salary` ADD PRIMARY KEY (`Month_Id`,`Employee_Id`);
ALTER TABLE `Employees_Salary` ADD CONSTRAINT `Relationship41` FOREIGN KEY (`Month_Id`)
REFERENCES `Months` (`Month_Id`)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `Employees_Salary` ADD CONSTRAINT `Relationship42` FOREIGN KEY (`Employee_Id`)
REFERENCES `employees` (`Employee_Id`)
ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE `salary_transaction` ADD CONSTRAINT `Relationship43` FOREIGN KEY (`Month_Id`, `Employee_Id`)
REFERENCES `Employees_Salary` (`Month_Id`, `Employee_Id`)
ON DELETE CASCADE ON UPDATE CASCADE;
我試過這個代碼,但它只從工資中減去最后借的錢
SELECT e.employee_id, e.employee_name, es.Month_Id, es.Salary, m.Month_Id, s.money_amount,
es.Salary-s.money_amount
FROM employees e
JOIN Employees_Salary es ON e.Employee_Id=es.Employee_Id
INNER JOIN Months m ON es.Month_Id=m.Month_Id
INNER JOIN salary_transaction s
WHERE es.Month_Id=1 AND es.Employee_Id=1
ORDER BY Salary_Transaction_Id DESC
LIMIT 1
首先,您在INNER JOIN salary_transaction s
之后缺少ON
並且由於您專門尋找WHERE es.Month_Id=1 AND es.Employee_Id=1
,我認為不需要ORDER BY Salary_Transaction_Id DESC
和LIMIT 1
。 暫時,讓我們刪除它。 你需要的實際上是一個SUM()
的總被借用和一個GROUP BY
。 像這樣的東西:
SELECT e.employee_id, e.employee_name, es.Month_Id, es.Salary, m.Month_Id,
SUM(s.money_amount) AS "Total Borrowed",
es.Salary-SUM(s.money_amount) AS "Salary Balance"
FROM employees e
JOIN Employees_Salary es ON e.Employee_Id=es.Employee_Id
INNER JOIN Months m ON es.Month_Id=m.Month_Id
INNER JOIN salary_transaction s ON e.Employee_Id=s.Employee_Id
WHERE es.Month_Id=1 AND es.Employee_Id=1
GROUP BY e.employee_id, e.employee_name, es.Month_Id, es.Salary, m.Month_Id;
這是您更新的小提琴: https ://dbfiddle.uk/ ? rdbms = mysql_8.0 & fiddle =3fbebdeccf3bc910339dd143e3bcf3c7
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.