2014-05-08 1 views
1

나는 다음과 같은 쿼리가 :이 중첩 쿼리의 다른 방법은 무엇입니까?

SELECT t.assignment_id, 
     t.timesheet_id, 
     t.hours, 
     (SELECT SUM(tss.hours) FROM timesheets tss 
       WHERE tss.assignment_id = t.assignment_id) as 'sumhours' 
FROM timesheets t 

산출 :

assignment_id | timesheet_id | hours | sumhours 
--------------------------------------------------------- 
     2    2    4.50   8.00 
     2    3    3.50   8.00 
     3    4    0.00   0.00 
     3    5    0.00   0.00 

테이블 정의 : 그래서

'timesheets' (
     'timesheet_id' int(11) AUTO_INCREMENT, 
     'hours' decimal(10,2), 
     'assignment_id' int(11), 
     PRIMARY KEY ('timesheet_id'), 
     CONSTRAINT 'assignment_fk' FOREIGN KEY ('assignment_id') REFERENCES 'assignments' ('assignment_id') ON DELETE CASCADE ON UPDATE CASCADE 
) 

당신은 내가 기록 된 시간의 수를 표시하기 위해 노력하고 있음을 볼 수 있습니다 각 과제의 총 시간 수 옆에있는 각 작업 표에 하나의 과제에는 많은 시간표가있을 수 있습니다. 이것을 달성하는보다 효율적인 방법이 있습니까?

+0

을 (MySQL은 적용되지 않습니다,하지만 대부분의 다른 현대의 RDBMS는이) 알려 : 그냥 합계가 필요한 경우, 당신은 할 수 있습니다. SQL 문은 훨씬 더 멋지게 보입니다. 편집 : BTW, 그냥 참고, MySQL 지원하지 않습니다 – cha

+0

나는 지금 MySQL을 사용하여 붙어있다 :/ –

+0

원하는 DDLs 및/또는 sqlfiddle 함께 원하는 결과 집합을 제공하는 것이 좋습니다. 상관 관계가있는 서브 쿼리는 관련성이없는 등가물보다 거의 항상 효율적입니다. – Strawberry

답변

0

결과에 시간을 어떻게 사용합니까? 당신이이 윈도우 함수 사용하여 얻을 수있는 방법을 알고 관심이 있다면

SELECT t.assignment_id, 
     t.timesheet_id, 
     SUM(t.hours) 
FROM timesheets t 
GROUP BY t.assignment_id, t.timesheet_id 
+1

이 그룹은 timesheet_id별로 그룹화되므로 할당 시간당 모든 작업 표 시간을 요약하지는 않습니다. –

+0

질문을 읽었습니까? * 따라서 각 과제마다 총 시간 수 옆에 각 작업 표에 기록 된 시간 수를 표시하려고한다는 것을 알 수 있습니다. * ..... 및 @RonSmith가 맞습니다. 할당 시간을 계산하지 않습니다. –

+0

죄송합니다, 저의 ..이 일을 더 좋은 방법으로 생각할 수 없습니다. – jianweichuah

관련 문제