2013-05-19 50 views
1

这可能已经在某处已经回答,但是我找不到它。 如果有人能够再次帮助我使用这个sql语句,那么将不胜感激。加入表格的总和

这是我至今的SQL语句:

SELECT * , Round((Rate * TIME_TO_SEC(Total) /3600) , 2) AS revenue 
FROM (SELECT event.eventID, event.staffID, event.role, TIMEDIFF(Time, Pause) 
AS Total, 
CASE WHEN Position = 'Teamleader' 
THEN (Teamleader) 
WHEN Position = 'Waiter' 
THEN (Waiter) 
ELSE '0' 
END AS Rate 
FROM event, rates, eventoverview 
WHERE Storno =0 
AND event.eventID= eventoverview.eventID 
AND event.clientid = rates.clientid 
GROUP BY event.eventID, event.clientID)q1 
GROUP BY q1.staffID 

我得到现在给我的每一名工作人员和事件的总速率表。 但是我想达到的是每位员工的费用总和。 所以基本上是一笔收入的总和。

希望有人能帮助我。在此先感谢

+0

欢迎来到Stack Overflow。请尽快阅读[常见问题]。请包括足够的模式来涵盖'*'是什么。此外,请学习如何在FROM子句中使用显式连接符号而不是隐式连接,并使用逗号分隔的表名列表。 –

回答

0

您可以在子查询中附上您的查询和做,在这样的外部查询:

SELECT *, 
    SUM(revenue) 
FROM 
(

    SELECT * , 
     Round((Rate * TIME_TO_SEC(Total) /3600) , 2) AS revenue 
    FROM 
    (
     SELECT 
     event.eventID, 
     event.staffID, 
     event.role, 
     TIMEDIFF(Time, Pause) AS Total, 
     CASE WHEN Position = 'Teamleader' THEN (Teamleader) 
       WHEN Position = 'Waiter'  THEN (Waiter) 
       ELSE '0' 
     END AS Rate 
     FROM event 
     INNER JOIN rates   ON event.clientid = rates.clientid 
     INNER JOIN eventoverview ON event.eventID = eventoverview.eventID 
     WHERE Storno =0 
     GROUP BY event.eventID, event.clientID 
    )q1 
    GROUP BY q1.staffID 
) AS t 
GROUP BY staffID; 

需要注意的是:你可能会得到不一致的数据,由于与使用SELECT *只有GROUP BYstaffID,不在GROUP BY子句中的列需要用聚合函数括起来,否则mysql将为其获取任意值。这不被推荐,它不是这样做的标准方式。

+0

感谢您的评论。不幸的是我没有得到预期的结果。我想每个员工都有一个总收入,而你的代码从表t得到的结果与从表q1 –

+0

得到的结果相同。我改变了组的q1和q2的eventid。 –