2017-07-13 3 views
1

私はまだmysqlを学んでいるので、何か間違っていると私を許します。他のテーブルのパーセンテージを持つ列を更新する

学習目的のために、私がプレイするゲームから統計のデータベースを作成しています。私はウェブサイトからデータを解析し、シーズンに基づいてデータをmysqlにアップロードするスクリプトを書いています。次に、データ集計に使用する集計テーブルを作成します。

しかし、前回の季節(今の季節は今の季節)と比較して、プレーヤーの進行状況を示す列を作成する方法はわかりません。

私はこれを試しましたが、クエリが時間がかかり過度のために結果を見ることができなかったし、サブクエリが非効率で、私はそれらを避けるべきだと読んでいるという事実。

update totals 
set `Season Performance` = 
(select round((season12.`Average Match Score`/season11.`Average Match Score`) * 100) 
from season12,season11 
where totals.`Pilot Name` = season12.`Pilot Name` AND season11.`Pilot Name` = season12.`Pilot Name` LIMIT 1); 

目標は、プレイしたプレーヤーのシーズン11と12をチェックしてパフォーマンスを確認して、合計の名前でテーブルを更新することです。

合計は、しかし、いくつかの選手がシーズン11または12

+0

Pilot Nameにインデックスがあることを確認してください? – kmoser

+0

私はまだ学んでいます。だから、許された。 – Strawberry

+0

列/表を列挙しているときは、スキーマが非常に間違っていることを確認できます。 – Strawberry

答えて

0

よりもむしろそのようなサブクエリではありませんので、私はこの(構文についてはテストしていない)のようなsomethinglikeそれを書き換えられるすべての季節です:

UPDATE totals INNER JOIN 
(
SELECT season12.`Pilot Name`, ROUND((season12.`Average Match Score`/season11.`Average Match Score`) * 100) AS the_perc 
FROM season12 INNER JOIN season11 ON season11.`Pilot Name` = season12.`Pilot Name` 
) a ON totals.`Pilot Name` = a.`Pilot Name` 
SET totals.`Season Performance` = a.the_perc 

とあなたのテーブルはあなたが `` SELECT``と `` JOIN``のために使用している列にインデックスが作成され

+0

ヘルプRiedsioに感謝します。ええ、構文に "a"の問題があります。エイリアスを設定する必要があると思いますが、私はどこにいるのかわかりません。 構文エラーの近くに4" 行目で ' – Scuro

+0

更新 'totals.'Pilot NAME' ON ON season11.'Pilot NAME' = season12.'Pilot NAME')aが='。あなたは、カンマを使用して代わりにしました。私のリフレックス "INNER JOIN" – Riedsio

+0

あなたの助けに感謝します。あなたの例であなたが何をやっているのか見ていきます(最初に一時結合テーブルを作成しています)。 #1054 - 'on clause'の 'a.Pilot Name'が不明な列 – Scuro

関連する問題