さて、私はユーザーテーブルを持っていて、最高のポイントをスコアで割ったユーザーの最大値を取得したいと考えています。以下は、私が探しているものの大まかなアイデアです。
SELECT MAX(SUM(points)/SUM(score)) FROM users
両方の列を合計して分割することには興味がありません。むしろ、各ユーザーのポイントとスコアを分割し、ロットから最高値を取得することに興味があります。
おそらく、サブクエリでこれを行うことができます:
Select max(points_over_Score)
from
(Select points/score AS points_over_score
from users);
そして、コメントで言及されているように、おそらく次のように短縮できます
SELECT MAX(points/score) FROM users;
あなたがやろうとしていることの説明を書いても、あなたの例がSUM
その中にある理由が明確にならないので、私はそれを使用しませんでした.
また、このようなコードに関する質問は、 stackoverflow.comにより適しています。自分の質問にフラグを立てて、モデレーターに移行を依頼できます。
すべてのポイントを合計し、次にすべてのスコアを合計してから2つを除算する必要がある場合、FrustratedWithFormsDesignerの回答は機能しません。その答えは、各ポイントをスコアで割ってから、最高の答えを返します。
これは機能するはずです:
SELECT MAX(sum_points / sum_score) from
(SELECT SUM(points) as sum_points, SUM(score) as sum_score FROM users)
ところで、これは「異常な」パーセンテージを返します。あなたはおそらくスコアをポイントで割ったいと思うでしょう。たとえば、100点満点中70点、つまり70%を獲得した場合、スコア(70)/ポイント(100)になります。
これがこの投稿の古さによるものなのか、当時の MySQL のバージョンによるものなのかはわかりませんが、上記の解決策を試したところ、次のエラーがスローされました。
エラー 1248 (42000) : すべての派生テーブルには独自のエイリアスが必要です
以下を使用してこれを解決できました。
SELECT MAX(sum_points / sum_score) from (SELECT SUM(points) as sum_points, SUM(score) as sum_score FROM users) as max_value;