2016-04-20 123 views
1

所以我跑了这个小查询,我似乎有一些奇怪的事情。MySQL:AVG函数:为什么查询返回不正确的值?

我想显示库存量大于库存平均库存的所有料品(如果这样做有道理......)。

当我运行它时,其中一个产品的库存量比计算出的平均值少......我不确定为什么。在这种情况下返回不应该是该项目是:421

返回数据:

"sum(quantity_stocked)" "count(product_id)" "avg(quantity_stocked)" 
"15885"     "18"    "882.5000" 


"product_id" "quantity_stocked" 
"861"   "1082" 
"591"   "1948" 
"485"   "1402" 
"421"   "858" 
"277"   "1920" 
"214"   "902" 
"59"   "1021" 

查询:

select sum(quantity_stocked), count(product_id), avg(quantity_stocked) 
FROM products; 

SELECT product_id, quantity_stocked 
FROM products 
WHERE quantity_stocked > (
    SELECT avg(quantity_stocked) 
    FROM products 
    GROUP BY product_id 
    LIMIT 1 
    ); 

其余代码:

CREATE TABLE products 
(
product_ID    int(10)    UNIQUE, 
product_name   varchar(30)   NOT NULL,   
quantity_stocked  int(5), 
product_cost   dec(8,2)   NOT NULL, 
PRIMARY KEY (product_ID) 
); 

INSERT INTO products VALUES 
(452,'Nike SS Pro Top',418, 22.99), 
(861,'Nike LunarGlide 7',1082, 74.99), 
(453,'Nike LS Pro Top',654, 64.99), 
(454,'Nike SS Pro Top',720, 64.99), 
(451,'Nike Pro Tank',480, 45.99), 
(485,'Nike 5k Run Short',1402, 24.99), 
(582,'Nike Fit Capri',750, 29.99), 
(591,'Nike Be Fast Tight',1948, 39.99), 
(847,'Nike Legend Tee',120, 34.99), 
(277,'Nike Miller v-neck',1920, 44.99), 
(135,'Adidas Soccer Pant',630, 34.99), 
(456,'Adidas SS Breathe Top',754, 19.99), 
(457,'Adidas Pro Cleat',626, 44.99), 
(214,'Adidas Slide',902, 19.99), 
(054,'Underarmor SL Top',854,54.99), 
(059,'Undersarmor LS High Neck',1021,54.99), 
(574,'Underarmor TR Short',746,24.99), 
(421,'Underarmor TR Balance Shoe',858,84.99); 
+0

看到一个关于调试的问题,让所有组件到位以使它可以回复,这是非常令人耳目一新的! – Shadow

+0

这是我一直在努力工作,使我的问题发生! :)很高兴它到达那里! – Sierra

回答

2

在你的子查询中,你比较平均的你的产品一个(这是,在这个特殊的例子,将#452,与418 quantity_stocked),而不是平均的所有产品。只要删除这部分:

GROUP BY product_id 
LIMIT 1 
+0

非常感谢!这工作好多了! :) – Sierra

+0

如果我可能会问,你是怎么认为它会比较452?因为它是最高价值? – Sierra

+0

由于限制1,它将采用由SELECT捕获的第一行。 什么是你的表中的第一行 - 我从你给出的INSERT语句中知道它。 – Sych

相关问题