2017-03-09 4 views
0

持っている私がいる場合:特定のWHEREの列のすべての値を最大値に設定するにはどうすればよいですか?

2 baskets of oranges with 7 and 10 each 

3 baskets of peaches with 12 and 15 each 

その後、私は設定したい:私は

update baskets set maxfruit = (select max(fruitCount) from baskets b where b.fruit = fruit) 

を試みたが、それだけで15にすべてを設定し

for every orange basket value of maxfruit to 10 and 

for every peach basket value of maxfruit to 15 

を...

+0

これがうまくいけば試してみてください:maxfruit = maxfruit =(バスケットbからb.fruit = fruitを選んでmax(fruitCount)を選択してください)basket.fruit = 'fruit' – SGventra

+0

全体のポイントに特定の名前を使用しないでください:( – Zeks

+0

データを挿入するときにmaxfruit値をmaxに設定する必要があります。 – SGventra

答えて

-1

あなた更新はテーブル全体からmaxを引っ張っているだけで、サブクエリを使ってmax foを引き出すことができますあなたがテーブルプレフィックスを使用しない限り、Rそれぞれの果実SQLで

UPDATE b 
SET b.maxfruit = b2.fruitCount 
FROM baskets b 
INNER JOIN (SELECT fruit, MAX(fruitCount) AS fruitCount 
      FROM baskets 
      GROUP BY fruit) b2 ON b.fruit = b2.fruit 
+0

私は確信していません彼のSQLiteの作品。それはちょうど私にエラーを返す '。 – Zeks

+0

これはT-SQLであり、SQLliteでも同様のことができるはずです – Moffatt

1

、あなたがその名前で列を参照している、あなたがで終わるテーブルのインスタンスは、最も内側の一つです。

したがってfruitは、最も内側のインスタンスbを指します。つまり、b.fruitfruitは常に同じ値です。外部テーブルのインスタンスを参照するために

、あなたは外のテーブルの名前を使用する必要があります。

update baskets 
set maxfruit = (select max(fruitCount) 
       from baskets b 
       where b.fruit = baskets.fruit); 
           ^^^^^^^^ 

(。そして、代わりにb.fruitの、あなただけのfruitを書くことができ、それは不明かもしれない)