需要正确解析dbms sql查询

时间:2016-03-03 13:43:11

标签: sql group-by

检索项目类型,项目类别和平均价格四舍五入到FMCG,计算机类型项目的两个小数位。平均价格必须低于2000。

ITEMCODE    ITEMTYPE    DESCR   PRICE   REORDERLEVEL    QTYONHAND   CATEGORY
I1001   FMCG    Britannia Marie Gold Cookies    20  100 1000    C
I1002   FMCG    Best Rice   120 100 1000    C
I1003   FMCG    Modern Bread    15  100 1000    C
I1004   Apparels    Lee T-Shirt 300 100 1000    B
I1005   Apparels    Levis T-Shirt   1700    100 1000    B
I1006   Apparels    Satyapaul Sari  7300    100 1000    A

我的查询是否正确?

SELECT ItemType, Category, ROUND(AVG(Price),2) 
FROM Item 
WHERE (ItemType = 'FMCG') 
OR (ItemType = 'Computer') 
AND (Avg(Price) < 2000) 
GROUP BY ItemType;

1 个答案:

答案 0 :(得分:1)

几乎正确,你不能在WHERE子句中使用聚合函数,你应该把它们放在一个HAVING子句之后,就像这样:

SELECT ItemType, Category, ROUND(AVG(Price),2) 
FROM Item 
WHERE ItemType in('FMCG','Computer') 
GROUP BY ItemType,Category;
HAVING Avg(Price) < 2000

我对您的查询进行了两次调整。首先,在将同一列与多于1的值进行比较时,请使用IN而不是OR&#39; s。

其次,我认为查询也应按类别分组,因为它并不总是相同,但如果您知道不应该从group by子句中删除它。