AND语句的分组 - MySQL

时间:2014-05-21 20:31:08

标签: mysql

我5年来第一次被重新投入MySQL。编写查询以运行一些报告。首先,我需要在第1部分找到按照Color ID分配多少加仑油漆。分部与我们的所有交易在不同的表格中找到。我写了这个查询 -

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”的总计在运行每个查询后匹配,他们这样做了。大。

但是现在它变得有点复杂,需要第3张桌子,因为他们想要相同的报告,但是被“内部”和“外部”涂料隔开。

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子句的顺序 - 以及括号的放置位置。任何想法/帮助将不胜感激。

2 个答案:

答案 0 :(得分: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更灵活,但可以返回不准确的结果。

答案 1 :(得分:0)

你不需要过度复杂化它。可以使用额外的GROUP BY子句处理分解,在本例中为GROUP BY p.intExt;