2011-09-13 4 views
0

나는 다음과 같은 쿼리를 시도하고 ...MySQL의 작은 문제

SELECT b.name AS batch_name, b.id AS batch_id, 
COUNT(s.id) AS total_students, 
COALESCE(sum(s.open_bal), 0) AS open_balance, 
sum(COALESCE(i.reg_fee,0) + COALESCE(i.tut_fee,0) + COALESCE(i.other_fee,0)) AS gross_fee 
FROM batches b 
LEFT JOIN students s on s.batch = b.id 
LEFT JOIN invoices i on i.student_id = s.id 
GROUP BY b.name, b.id; 

결과가

| batch_name | batch_id | total_students | open_balance | gross_fee | 
+------------+-----------+----------------+--------------+-----------+ 
| ba  | 11  | 44    | 0   | 1782750 | 
+------------+-----------+----------------+--------------+-----------+ 

하지만 난 sum(COALESCE(i.reg_fee,0) + COALESCE(i.tut_fee,0) + COALESCE(i.other_fee,0)) AS gross_feeLEFT JOIN fm_invoices i on i.student_id = s.id을 제거하면 unexpted 결과를 제공하고, 그것이 예상 부여합니다/올바른 결과를 설정 다음과 같이 ...

| batch_name | batch_id | total_students | open_balance | gross_fee | 
+------------+-----------+----------------+--------------+-----------+ 
| ba  | 11  | 34    | 0   | 0   | 
+------------+-----------+----------------+--------------+-----------+ 

나는 확실히하고 있으며, 나는 모든 것을 시도하고있다. 지난 시간 이후로 이온, 도와주세요. 내가 질문을 가정

+1

무엇이 당신의 질문입니까? – ajreal

+1

@ajreal 왜 COUNT (s.id)가 첫 번째 쿼리에서 44 개를 반환하고 두 번째 쿼리에서 34 개를 반환하고 동일한 쿼리에서 송장을 합산하는 동안 34 개를 계산할 수 있습니까? – seoppc

답변

0

는 뭔가 같은 :

이유는 무엇입니까 두 번째 쿼리에서 COUNT(s.id) 첫 번째 쿼리에서 반환 44, 34, 나는 내가있는 송장을 요약하면서 (34 명) 학생을 계산 할 수있는 방법 같은 검색어?

학생들 중 일부에게 여러 인보이스가 있으며, 같은 결과를 가져 오는 여러 행의 참여 결과는 s.id입니다. 개수를 계산하면 여러 행을 각각 계산합니다.

쿼리가 각 학생 ID를 한 번만 계산하도록하려면, COUNT(DISTINCT s.id)을 사용해야합니다. 단, 인보이스 조인의 결과로 여러 번 표시되는 경우에도 마찬가지입니다. 단지 COUNT(DISTINCT s.id)COUNT(s.id)을 변경, 변경하는 것에 대한 귀하의 질문에 다시


. 나머지 쿼리는 괜찮은 것 같습니다. 내가 원하는 것을 정확하게 이해하면됩니다.

+0

맞습니다. 내 검색어에서 무엇을 변경해야합니까? – seoppc

+0

프로젝트를 가져가십니까? 좀 더 많은 MySQL 도움이 필요합니다. – seoppc

+0

예, 저는 Percona Inc.의 MySQL 성능 컨설턴트로 일합니다. 당신은 여기에 저희에게 연락하실 수 있습니다 : http://www.percona.com/mysql-consulting/overview/ –