【问题标题】:MySQL: AVG function: Why does query return incorrect value?MySQL:AVG 函数:为什么查询返回不正确的值?
【发布时间】:2016-04-20 00:18:11
【问题描述】:

所以我运行了这个小查询,似乎发生了一些奇怪的事情。

我想显示所有库存大于平均库存的商品(如果有意义的话...)。

当我运行它时,其中一种产品的库存量低于计算的平均值……我不知道为什么。在这种情况下,不应该返回的项目是: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);

【问题讨论】:

  • 看到一个关于调试的问题令人耳目一新,所有组件都已到位,可以回答!
  • 我一直在努力解决我的问题! :) 很高兴它到了那里!

标签: mysql function average


【解决方案1】:

在您的子查询中,您将比较 一个 产品的平均值(在此特定示例中,将是 #452,quantity_stocked 为 418),而不是 的平均值>所有产品。只需删除这部分:

GROUP BY product_id
LIMIT 1

【讨论】:

  • 非常感谢!这样效果好多了! :)
  • 如果我可以问一下,您是如何认为它会与 452 进行比较的?因为它是最高价值?
  • 由于 LIMIT 1,它将采用 SELECT 捕获的第一行。你表中的第一行是什么 - 我从你给出的 INSERT 语句中知道。
  • 啊,这更有意义。再次感谢您!
猜你喜欢
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2013-03-08
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-03-11
  • 2021-05-30
相关资源
最近更新 更多