조인 된 테이블 중 하나에 일대 다 관계가있는 꽤 큰 쿼리에서 COUNT를 수행해야합니다. 이것은 모든 데이터가 일대 다 테이블의 'many'측면에서 항목이 반복되는 횟수로 곱해 지므로 내 결과를 포기합니다.일대 다 테이블 조인에서 mysql count (*)
이것은 문제를 강조하기 위해 단지 관련 부분을 보여주는 쿼리의 단축 버전 :
SELECT COUNT(trimtype) FROM versiontrim
INNER JOIN trims USING (trim_id)
INNER JOIN prices USING(version_id)
INNER JOIN m_versions USING(version_id)
WHERE trimtype IN('sec', 'help') AND price BETWEEN 200001 AND 210000
GROUP BY version_id
모든 테이블은 일대 다 관계를 가지고 같이 보이는 m_versions 제외하고는 매우 straighforward됩니다 :
version_id serv_id
1 1
1 2
1 3
1 4
1 5
.... and so on
쿼리의 예상 결과는 다음과 같습니다
version_id COUNT(trimtype)
44 9
54 7
69 9
214 10
216 6
282 1
290 10
version_id COUNT(trimtype)
44 45
54 35
69 45
214 50
216 30
282 5
290 50
어떻게이 문제를 방지하기 위해 :대신 나는 즉, 모든 카운트가 m_versions 테이블에 반복 VERSION_ID 횟수 인 5를 곱한 값이 무엇입니까? 감사합니다.
당신이 COUNT (DISTINCT trimtype)''로 교체하면? –
'COUNT (DISTINCT trimtype)'으로 바꾸면'where' 절에서'2' 값만 필터링하기 때문에 최대 값은'2'가됩니다. 'trimtype IN ('sec', 'help') .... ' –
JW가 맞습니다. 나는 trimtype에 대해 DISTINCT를 시도하고 그 다음에 version_id에 대해 시도했지만 내가 찾고있는 것을 얻지 못했습니다. – BernardA