2012-11-19 5 views
1

각 테이블의 소계를 더할 수있는 mySQL 쿼리를 작성 중입니다.MYSQL에 서브 합계 추가하기

회원 용 테이블이 하나 있습니다. 이름, 고유 ID 및 다른 관련이없는 항목이 있습니다. 다른 테이블은 기록 된 커뮤니티 서비스를 추적하기위한 것입니다. 각 회원은 그 안에 여러 번있을 수 있습니다. 필드는 고유 ID (구성원에 대한 외래 키), auto_increment (기본 키), 용어, 시간 수 및 위치입니다.

이 쿼리에서 수행 할 작업은 주어진 용어에 대한 각 구성원의 시간 합계를 더하는 것입니다. 내가 가지고있는 것은 아래에 있지만 불행하게도 각 멤버의 합계가있는 첫 번째 멤버 만 제공합니다. 어떤 아이디어? 쿼리에 구문 오류가보고 한 것

SELECT fName, lName, SUM(hours) 
FROM members M, communityService S 
WHERE S.term = 'f2012' && M.onid = S.member 
GROUP BY lName, fName 

대부분의 RDBMS의 MySQL이 아닌 다른,하지만 MySQL은 고유의 기본 동작이 있습니다

SELECT fName, lName, SUM(hours) 
FROM members M, communityService S 
WHERE S.term = 'f2012' && M.onid = S.member 
+0

[잘못된 습관 : 오래된 스타일의 조인 사용] (http://sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/bad-habits-to-kick-using-old-style- ANSI - ** 92 ** SQL 표준 (** 20 년 이상 **)에서 * * ​​ANSI'JOIN' 구문으로 구식 * * 쉼표로 구분 된 테이블 목록이 대체되었습니다. 예전에) 그 사용은 실망 스럽습니다. –

답변

1

당신은 fName,lName 당 합계를 집계하는 GROUP BY 절을 누락 GROUP BY 절에 나타나지 않는 집계의 나머지 열을 채우기 위해 비 결정적으로 일치하는 행을 선택하는 것입니다. 그래서 첫 번째 행은 lName, fName입니다.

검토 the documentation on aggregate functions and the GROUP BY clause.

암시 적 (쉼표로 구분 된 FROM) 대신 명시적인 INNER JOIN을 사용하는 것이 좋습니다.

SELECT 
    fName, 
    lName, 
    SUM(hours) AS total_hours 
FROM 
    members M, 
    INNER JOIN communityService S M.onid = S.member 
WHERE 
    S.term = 'f2012' 
GROUP BY lName, fName 
+0

도움을 주셔서 감사합니다! 나는 아마 어떤 종류의 표식이 빠져 있음을 알았다. JOIN도 살펴 보겠습니다. – Jacobm001

1

예 : group by 절이 필요합니다.

SELECT fName, lName, SUM(hours) 
FROM members 
INNER JOIN communityService ON communityService.member = members.onid 
WHERE communityService.term = 'f2012' 
GROUP BY fName, lName <--- modify as desired for your requirements. 

현대 조인 구문을 사용하여 다시 작성했습니다. 서버에 "잘못된"것은 없지만 "게으른"조인 구문을 가비지 헤드에 남겨 두는 것이 가장 좋습니다.

+0

도움 주셔서 감사합니다. :) – Jacobm001

관련 문제