以下是我的两个表sold_items
和categories
。 :
sold_items:
类:
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
}表所以它看起来像这样:
正确完成的计算值为999.50(即1000 + 999/2)。我的SQL命令有什么问题?
提前致谢
答案 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