使用UPDATE使用AVG数据

时间:2017-03-07 15:00:05

标签: mysql sql database foreign-keys mysql-workbench

以下是我的两个表sold_itemscategories。 :

sold_items:

enter image description here

类:

enter image description here

sold_items使用id_Categories表中的categories作为外键。

我正在使用此命令尝试根据给定的“idCategories”填充项目的average_price - 所以要么是1还是2。 我正在使用此命令计算idCategories分类为2的商品的平均价格:

UPDATE categories SET average_price = (SELECT AVG(price) FROM sold_items) WHERE idCategories='2'

此命令成功执行且没有错误,但不是计算idCategories = 2的两个项目的平均价格,而是平均所有产品价格并将638.00的值插入categories }表所以它看起来像这样:

enter image description here

正确完成的计算值为999.50(即1000 + 999/2)。我的SQL命令有什么问题?

提前致谢

3 个答案:

答案 0 :(得分:1)

我建议使用相关的子查询:

UPDATE categories c
    SET average_price = (SELECT AVG(si.price)
                         FROM sold_items si
                         WHERE si.iDCategories = c.idCategories
                        )
    WHERE idCategories = 2;

这样可以更容易一次更新多个类别 - 甚至更新所有类别。

注意:如果您的ID是数字(您的ID似乎是),请不要使用单引号进行比较。

答案 1 :(得分:0)

您还需要在子查询中指定idCategories = 2的位置:

UPDATE categories 
SET average_price = (SELECT AVG(price) FROM sold_items WHERE idCategories='2') 
WHERE idCategories=2

答案 2 :(得分:0)

试试这个:

CREATE TABLE sold_items (
    idsold_items INT,
    item_number VARCHAR(7),
    title VARCHAR(14),
    URL VARCHAR(3),
    price INT,
    idCategories INT
)

CREATE TABLE categories (
    idCategories INT,
    model VARCHAR(7),
    averageprice FLOAT(10,2),
    keyword VARCHAR(1)
)

INSERT INTO sold_items
VALUES ('1', '14545', 'Equitek CAD', '...', '99', '1'),
       ('2', '454545', 'Equitek', '...', '454', '1'),
       ('3', '456645', 'Samsung', NULL, '999', '2'),
       ('4', '5456464', 'Samsung Galaxy', '', '1000', '2')

INSERT INTO categories
VALUES ('1', 'Equitek', NULL, ''),
       ('2', 'Samsung', NULL, NULL)

UPDATE categories
SET averageprice = CalculatedAverage.averagePrice
FROM categories
JOIN (
    SELECT
        idCategories,
        [averagePrice] = AVG(price)
    FROM sold_items
    GROUP BY idCategories
) CalculatedAverage ON categories.idCategories = CalculatedAverage.idCategories

结果:

idCategories     model    averageprice    keyword
1                Equitek  276.00
2                Samsung  999.00          NULL