2017-03-07 1 views
0

ここには2つのテーブルsold_itemscategoriesがあります。 :UPDATEを使用して2番目のテーブルの列にAVGデータを入力する

sold_items:

enter image description here

カテゴリ:

enter image description here

sold_items外部キーとしてcategoriesテーブルからid_Categoriesを使用します。

私がしようとすると、それに基づいたアイテムのaverage_priceを移入するには、このコマンドを使用していますが、「idCategories」与えられています - ので、いずれか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(i.e.1000 + 2分の999)であろう。私のSQLコマンドで何が問題になっていますか?あなたにも、サブクエリ内で、どこidCategories = 2を指定する必要があり、事前

+2

あなたにも、サブクエリ内で、どこidCategories = 2を指定する必要があります(idCategories = 2 sold_items FROM AVG(価格)を選択) – VDK

答えて

1

私は、相関副問合せをお勧めします:

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

これが作ります一度に複数のカテゴリを更新するほうがずっと簡単です。

注:あなたのIDが数字である(あなたのように見える)場合は、一重引用符を使用しないでください。

+0

ニース!私もこのオプションを提案しようとしていました。 – VDK

+0

HI Gordon、すべてのカテゴリを一度に更新できると述べましたが、これを変更するにはどうすればよいですか?乾杯EDIT-また 'c'と' si'ビットについて説明できますか?私は – neilH

+0

@ bms9nmhの前にそれらを見たことがない。 。 。それらはテーブルエイリアスです。一般的には推奨されており、クエリが複数のテーブルを参照する場合は強くお勧めします。すべてのカテゴリを更新するには、 'where'句を削除するだけです。 –

0

ありがとう:

UPDATE categories 
SET average_price = (SELECT AVG(price) FROM sold_items WHERE idCategories='2') 
WHERE idCategories=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 
+0

CREATE TABLEもMySQLに存在します。構文のどの部分が間違っているか教えていただけますか? –

関連する問題