2016-02-09 49 views
0

我有我的MySQL数据库的三个表分别是:SUM内蒙古/左/右连接的SQL查询

员工

ID int 
Name 
Surname 

DayOffRequest

ID int (PK) 
EmployeeID FK references Employee 
HowManyDays double 

排名

ID int (PK) 
EmployeeID FK references Employee 
daysEmployeeCanGet double 

每个员工都有排名,他每年可以获得的休息天数是由他的排名决定的。例如,第一年他总共可以得到14天。他们的日子是由DaysOffRequest举行。

我想在一个查询中获得用户ID,RankID,SUM(HowManyDays),SUM(daysEmplooyeeCanGet)

我用

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 

但没有奏效。我的意思是它的工作,但不是想要的。

我实际上想做一个查询,就像每当员工休息一天时一样,他会自动减少从他可以得到的总天数中获得的天数(他可以得到的总天数是daysEmployeeCanGet for everyrank他有。)

我该如何实现这一目标?

我希望我很清楚。

谢谢。

+0

我删除了无关的数据库标记。随意为您真正需要的数据库添加标签。 –

+0

我只看到您的查询的第一部分,并且您使用的表格(用户)未在您的表格列表中列出... – mauro

+0

哦,我很抱歉,我只是将表格翻译成英文,员工和用户是同一件事情。 @mauro –

回答

0

请尝试下面的查询,但每个员工的Rank表中必须有一行,因为我已经使用了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 
+0

您为什么使用MAX? –

+0

此外它还计算daysEmployeeCanGet的倍数值。例如,如果它是70,则返回140. –

+0

我使用了max,因为如果Rank表中的每个员工都有一条记录,那么您只需要其中的一条记录,因为它将为DayOffRequest的每一行重复相同的值。你也可以使用MIN,但不应该有差别。你的用户和Rank表有1对1关系吗? – Faisal