2014-05-21 4 views
0

나는 5 년 만에 MySQL에 처음으로 돌아 왔습니다. 일부 보고서를 실행하는 쿼리 작성 하나는 Color ID로 얼마나 많은 페인트를 1기에 분배했는지 발견해야했습니다. 부서는 모든 거래가 아닌 다른 테이블에서 발견되었습니다. 나는이 쿼리를 작성 -AND 구문 그룹화 - MySQL

SELECT m.divName, 
n.colorName, 
n.colorID, 
SUM(n.gallons) as totalGallons 
FROM mfccnStore m, netTran2014 n 
WHERE (m.division = 1) AND (m.store = n.store) 
GROUP BY colorID 
ORDER BY totalGallons DESC 
INTO OUTFILE '/home/Div1All.csv' 
FIELDS TERMINATED BY ','; 

는 다음을 테스트를 봤는데, 내가 가장 많이 사용되는 색상 중 하나를 포착하고이 쿼리 작성 -

SELECT m.divName, 
n.colorName, 
n.colorID, 
n.gallons 
FROM mfccnStore m, netTran2014 n 
WHERE (n.colorID = "6385") AND (m.division = 1) AND (m.store = n.store) 
INTO OUTFILE '/home/DoverWhite.csv' 
FIELDS TERMINATED BY ','; 

를 그리고 확인하는 색상 ID의 합계 각각의 쿼리를 실행 한 후 "6385"가 일치했습니다. 큰.

하지만 이제는 동일한 보고서를 원하지만 "내부"및 "외부"페인트로 구분되기 때문에 필요한 세 번째 테이블이 조금 더 복잡해집니다.

SELECT m.divName, 
n.colorName, 
n.colorID, 
SUM(n.gallons) as totalGallons 
FROM mfccnStore m, netTran2014 n, netProduct p 
WHERE ((p.intExt = "INTERIOR") AND (m.division = 1) AND (m.store = n.store)) 
AND ((n.rex = p.prodNbr) AND (n.sizeCode = p.szCd)) 
GROUP BY colorID 
ORDER BY totalGallons DESC 
INTO OUTFILE '/home/Div1Int.csv' 
FIELDS TERMINATED BY ','; 

이 나에게 조금 더 두 배 이상 다른 두 쿼리이다 합계를 제공하고 나는 내 WHERE 절의 순서로 수행하는 데 필요한 확신 - 괄호가 어디에 배치되고있다. 모든 아이디어/도움을 크게 주시면 감사하겠습니다.

답변

1

먼저 JOIN 구문을 사용하는 것이 좋습니다. 그런 다음 다음과 같이 읽습니다

SELECT m.divName, 
     n.colorName, 
     n.colorID, 
     p.intExt 
     SUM(n.gallons) totalGallons 
FROM mfccnStore m 
    JOIN netTran2014 n ON m.store = n.store 
    JOIN netProduct p ON n.rex = p.prodNbr AND n.sizeCode = p.szCd 
WHERE p.intExt IN ('INTERIOR','EXTERIOR') 
    AND m.division = 1 
GROUP BY n.colorID, p.intExt 
ORDER BY totalGallons DESC 

당신이 GROUP BY에 넣어 어떤 필드주의 - 대부분의 RDBMS 집계 함수에 포함되지 않습니다 포함 할 모든 필드가 필요합니다. MySQL은 좀 더 유연하지만 부정확 한 결과를 반환 할 수 있습니다.

+0

sgeddes - 나는 내일 아침 회의에 전화를해서 그 차이가 있는지 확인합니다. 지금까지 답변 해 주셔서 감사합니다. – BigRedEO

+0

이것은 나에게 가장 가까운 것인데 - 오늘 아침에 netProduct 테이블의 키에 필요한 요소가 하나 더 있다는 사실을 알았습니다. 고맙습니다! – BigRedEO

0

과도하게 작성할 필요가 없습니다. 이 경우 GROUP BY 절을 추가로 처리 할 수 ​​있습니다. GROUP BY p.intExt;

+0

나는 또한 여기에 colorID로 그룹화 할 수 없다고 생각합니다. 'AND' 만 사용하면 괄호를 완전히 제거 할 수 있습니다. – skobaljic

+0

ajacian81 - 추가 GROUP BY를 추가하겠습니다. skoblajic - 제 3의 쿼리에서 colorID별로 그룹화 할 수없는 이유는 무엇입니까? WHERE 절의 순서와 관련이 있습니까? – BigRedEO