简体   繁体   English

SQL查询的内部/左侧/右侧联接中的SUM

[英]SUM in Inner/Left/Right Joins on SQL Query

I have three tables on my mySQl database which are: 我的mySQl数据库上有三个表,分别是:

Employee : 员工人数

ID int
Name
Surname

DayOffRequest : DayOffRequest

ID int (PK)
EmployeeID FK references Employee
HowManyDays double

Rank : 排名

ID int (PK)
EmployeeID FK references Employee
daysEmployeeCanGet double

Every employee has ranks and how many days off he can get per year is specified by his rank. 每个员工都有等级,他的等级指定了他每年可以休多少天。 For example on the first year he can get 14 days at total. 例如,在第一年,他总共可以获得14天的时间。 Their days of are being held by DaysOffRequest . 他们的日子由DaysOffRequest

I'd like to get UserID, RankID, SUM(HowManyDays), SUM(daysEmplooyeeCanGet) in one query. 我想在一个查询中获取UserID,RankID,SUM(HowManyDays),SUM(daysEmplooyeeCanGet)

I used 我用了

SELECT 
    e.id, r.id,
    SUM(r.daysEmployeeCanGet),
    SUM(HowManyDays) 
FROM 
    Employee e 
INNER JOIN 
    Rank r ON r.`userID` = e.`ID` 
INNER JOIN 
    DayOffRequest 

But it didn't work. 但这没有用。 I mean It did work but not as wanted. 我的意思是,它确实起作用了,但并没有想要的那样。

I actually want to make a query like whenever an employee gets a day off it automatically reduce the number of days he gets from the total days that he can get.(total days that he can get is sum of daysEmployeeCanGet for everyrank he has.) 我实际上想做一个查询,就像每当雇员放假一天时,它都会自动从他可以得到的总天数中减少他得到的天数(他可以得到的总天数是他所获得的每一等级的天数EmployeeCanGet之和)。

How can I achieve that goal? 我怎样才能实现这个目标?

I hope I am clear enough. 我希望我足够清楚。

Thank you. 谢谢。

Try below query, but there must be one row in Rank table for each employee because I have used max. 请尝试下面的查询,但是由于我使用了max,因此在每位员工的排名表中必须有一行。

SELECT u.id
       MAX(r.daysEmployeeCanGet) 'Allowed',
       SUM(HowManyDays) 'Availed',
       MAX(r.daysEmployeeCanGet) - SUM(HowManyDays) 'Remaining'
FROM User u
INNER JOIN Rank r ON r.EmployeeID=u.ID
INNER JOIN DayOffRequest dor ON u.ID = dor.EmployeeID
GROUP BY u.id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM