2013-05-19 4 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

스택 오버플로에 오신 것을 환영합니다. 곧 [자주 묻는 질문]을 읽어주십시오. '*'가 무엇인지 커버 할 수있는 충분한 스키마를 포함 해주십시오. 또한 FROM 절에 쉼표로 구분 된 테이블 이름 목록과 암시 적 조인 대신 명시 적 JOIN 표기법을 사용하는 방법을 배우십시오. –

답변

0

그 같은 외부 쿼리에서 : 당신 때문에 SELECT *의 사용과에 일치하지 않는 데이터를 얻을 수 있습니다 : 있음

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; 

GROUP BYstaffID 만있는 경우 GROUP BY 절에없는 열은 집계 함수로 묶어야합니다. 그렇지 않으면 mysql에서 임의의 값을 가져옵니다. 이것은 권장되지 않으며 표준 방법이 아닙니다.

+0

의견을 보내 주셔서 감사합니다. 불행히도 나는 예상 한 결과를 얻지 못하고있다. 직원 당 총 수익을 원하고 코드를 사용하여 테이블 t의 결과는 테이블 q1 –

+0

과 동일합니다. 알았습니다. q1과 q2에 대한 그룹을 eventid로 변경했습니다. –

관련 문제