2012-07-23 167 views
1

想要在一个查询中获得多少物品的价格高于平均价格和更低。Mysql聚合函数。平均价格和物品价格

我的查询:

SELECT COUNT(*) 
FROM item i 
WHERE refine = 0 AND item = 5170 
GROUP BY id 
HAVING price > AVG(price) - STD(price) AND i.price < AVG(price) + STD(price) 

,但我得到的错误未知列'价格 'having子句'

中如果我使用AVG和STD功能选择:

SELECT COUNT(*), SUM(price > AVG(price) - STD(price) AND i.price < AVG(price) + STD(price)) as middle 
FROM item i 
WHERE refine = 0 AND item = 5170 

我再次收到错误消息。如何进行正确的查询?

这里就sqlFiddle

+2

你能提供有关[SQLFiddle(HTTP的例子:// sqlfiddle.com)? – 2012-07-23 10:57:05

+0

感谢您链接到SQLFiddle,漂亮的工具)我添加了链接到帖子。 – user1081056 2012-07-23 11:05:08

+0

您不能用另一个聚合包装聚合。 – 2012-07-23 11:09:51

回答

2

试试这个

select count(*) from item as t1 inner join 
(
select id,AVG(price) - STD(price) as sum1, AVG(price) + STD(price) as sum2 
from item 
group by id 
) as t2 
on t1.id=t2.id and t1.price>sum1 and t1.price<sum2 
+0

我已经添加了一些小修改此查询,但这个想法对我有用。谢谢;) – user1081056 2012-07-23 11:33:36

+0

欢迎:) – Madhivanan 2012-07-23 12:20:18

-1
SELECT COUNT(*), SUM(price > AVG(price)) - STD(price) AND i.price < AVG(price) + STD(price)) as middle 
FROM item i WHERE refine = 0 AND item = 5170 

你忘了 “)” 链接 - >SUM(price > AVG(price))