0

sum 関数を使用して 1 列のすべての値を合計し、別のテーブルのタプル数で割るクエリを作成しようとしています。何らかの理由で、合計クエリを単独で実行すると正しい数値が返されますが、クエリでそれを使用すると、値が間違っています。

これは私がやろうとしていることですが、数字が間違っています。

select (sum(adonated) / count(p.pid)) as "Amount donated per Child"
from tsponsors s, player p;

問題は合計にあることがわかりました。以下は、25000 を返す必要があるときに 650,000 を返します。

select (sum(adonated)) as "Amount donated per Child"
from tsponsors s, player p;

プレーヤー p から を削除すると、正しい金額が得られます。ただし、プレーヤーの数を取得するにはプレーヤーテーブルが必要です。

このクエリに関連する 3 つのテーブルがあります。player(pid, tid(fk)) team(tid) tsponsors(tid(fk), adonated, sid(fk)) これは参加テーブルです

私が取得したいのは、各チームに寄付されたすべての金額の合計 (寄付) であり、これをデータベース内のプレイヤー数 (pid) で割ります。

4

2 に答える 2

1

試す

select sum(s.adonated) / (SELECT count(p.pid) FROM player p) 
 as "Amount donated per Child"
from tsponsors s;

元のクエリは条件なしで 2 つのテーブルを結合するため、クロス結合になります。

アップデート

SELECT ts.tid, SUM(ts.adonated),num_plyr
FROM tsponsors ts 
INNER JOIN 
 (
   SELECT tid, COUNT(pid) as num_plyr
   FROM player
   GROUP BY tid
)a ON (a.tid = ts.tid)
GROUP BY ts.tid,num_plyr
于 2013-04-15T17:17:36.123 に答える
1

あなたのスポンサーはチームに多額の寄付をしていると思います。次に、スポンサー チームの子供 1 人あたりの寄付の割合を知りたいとします。

次に、次のようなものが必要になります。

SELECT p.tid,(SUM(COALESCE(s.adonated,0)) / COUNT(p.pid)) AS "Amount donated per Child"
FROM player p 
LEFT OUTER JOIN tsponsors s ON s.tid=p.tid
GROUP BY p.tid

LEFT OUTER JOINまた、チームにスポンサーがいない場合に 0$ を表示するためにa を使用しました。

于 2013-04-15T19:36:37.940 に答える