2012-03-15 2 views
0

보고서 및 할당 테이블의 총 레코드 수를 계산하는 쿼리를 작성하면서 동시에 주 테이블 그룹에서 정보를 검색합니다. 그룹에는 gid로 다른 테이블에 저장된 기본 키 ID가 있습니다. 나는이 하나의 레코드 만도 그들의 경우 여러 그룹을 반환 실행할 때마다SQL 조인은 하나의 레코드 만 반환합니다.

SELECT `group`.`id` AS `gid` 
     , `group`.`name` AS `g_name` 
     , COUNT(`report`.`id`) AS `reports` 
FROM `group` 
     LEFT OUTER JOIN `report` ON `report`.`gid` = `group`.`id` 
     LEFT OUTER JOIN `assignment` ON `assignment`.`gid` = `group`.`id` 
WHERE `group`.`active` = 0 
ORDER BY 
     `group`.`name`; 

내 문제는이 쿼리입니다.

미리 감사드립니다.

+0

어느 RDBMS입니까? 이것은 SQL Server에서 파싱되지 않습니다. – Yuck

+2

downvote하지 않겠지 만 "group"테이블의 이름을 지정하기 위해 -5를주고 싶습니다. 적어도 주위에 괄호를 사용하십시오 ... 제발. –

+0

그것은 mysql이고 다른 누군가가 방금 편집했기 때문에 그렇지 않다 – Parham

답변

3

글쎄, 당신의 쿼리는 정확하지 않습니다 :) 우선 group by 절이없는 집계 된 함수 (이 경우에는 count)를 사용해서는 안됩니다. 이제는 해당 절이 있더라도 쿼리는 정보를 요약하며 동일한 쿼리의 세부 정보와 요약 정보를 모두 원합니다. 이 정보를 검색하기 위해 두 가지 별도의 쿼리를 권하고 싶지만 하나의 쿼리 (세부 정보와 "보고서 및 할당 테이블의 총 레코드 수")로 정보를 혼합하려면 다음 쿼리를 사용하십시오.

나는 당신이 무엇을 찾고 있는지 정확히 이해할 수 있지만 나는 당신에게 당신이 기대하는 결과를 얻는 방법에 대한 아이디어를 줄 것이다.

+0

고마워요! 또한 조언을 주셔서 감사합니다 – Parham

+0

그룹에 의해 제출 된 총 보고서 수와 관리자가 할당 한 총 할당 수를 얻으려고했습니다. 그리고 그룹이 아직 함께 일하고 있다면 적극적으로 의미합니다. – Parham

0

쿼리에서 하나의 레코드를 반환하는 것으로 제한되는 내용을 볼 수 없습니다.

기존 데이터에 문제가있는 곳을 찾아야합니다.

그래서 등

0

해당 할당 기록 많은 ahow acitive = 0, 어쩌면 도움이 될 것입니다 어디에 얼마나 많은 그룹 :

이 난
SELECT 
    groupid, 
    groupname, 
    reports, 
    assignments, 
FROM 
(SELECT group.id, group.name, COUNT(*) AS reports from group 
    INNER JOIN report ON (report.gid = group.id) 
    WHERE group.active = 0 
    GROUP BY group.id) AS ReportForGroup 
CROSS JOIN 
(SELECT group.id AS groupid, group.name AS groupname, COUNT(*) AS assignments from group 
    INNER JOIN assignmentON (assignment.gid = group.id) 
    WHERE group.active = 0 
    GROUP BY group.id) AS AssignmentForGroup 
    ON (ReportForGroup.groupid = AssignmentForGroup.groupid) 
ORDER BY groupname; 

그것을 그렇다면 확인할 수 없습니다 LEFT JOIN은 COUNT (*) 0 또는 1로 돌아갑니다. 0을 반환하면 INNER를 LEFT로 변경하고 두 쿼리간에 INNER JOIN을 사용합니다.

관련 문제