2013-05-19 89 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。 –