首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用UPDATE用AVG数据填充第二个表的列

问使用UPDATE用AVG数据填充第二个表的列
EN

Stack Overflow用户
提问于 2017-03-07 23:00:05
回答 3查看 47关注 0票数 0

这是我的两个表sold_items和categories。:

sold_items:

​

​

类别:

​

​

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

我使用这个命令来尝试填充基于给定的“idCategories”的商品的average_price -因此可以是1或2。我使用这个命令来计算idCategories分类为2的商品的平均价格

代码语言:javascript
复制
UPDATE categories SET average_price = (SELECT AVG(price) FROM sold_items) WHERE idCategories='2'

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

​

​

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

提前感谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-03-07 23:09:59

我建议使用相关子查询:

代码语言:javascript
复制
UPDATE categories c
    SET average_price = (SELECT AVG(si.price)
                         FROM sold_items si
                         WHERE si.iDCategories = c.idCategories
                        )
    WHERE idCategories = 2;

这使得一次更新多个类别--甚至所有类别--变得更加容易。

注意:如果您的If是数字的(您的看起来是数字的),不要使用单引号进行比较。

票数 1
EN

Stack Overflow用户

发布于 2017-03-07 23:07:23

您还需要在子查询中指定where idCategories = 2:

代码语言:javascript
复制
UPDATE categories 
SET average_price = (SELECT AVG(price) FROM sold_items WHERE idCategories='2') 
WHERE idCategories=2
票数 0
EN

Stack Overflow用户

发布于 2017-03-07 23:12:59

试试这个:

代码语言:javascript
复制
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

结果:

代码语言:javascript
复制
idCategories     model    averageprice    keyword
1                Equitek  276.00
2                Samsung  999.00          NULL
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42651525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档