0

次のようなゴルフ結果の表があります。

name           r1    r2    r3    r4    event
Tiger Woods    71    68    67    72    Buick Invitational 2006
Nathan Green   67    70    69    72    Buick Invitational 2006
J.M. Olazabal  74    64    71    69    Buick Invitational 2006
Arjun Atwal    70    67    71    71    Buick Invitational 2006

特定の日/ラウンドで、各プレイヤーが対戦相手よりも高いスコアを獲得した頻度をパーセンタンスで計算できるようにしたいと考えています。

たとえば、上の例では、表示されている 4 人のプレーヤーのうち、Tiger はラウンド 1 で JM Olazabal よりも低いスコアを記録しています。1/3 = 33%。

ラウンド 3 で彼のスコアは最低だったので、100% です。

Arjun Atwal は r3 で関節の最高得点を記録し、誰にも負けていないので、=0% です。

等々...

基本的に、イベントフィールドが同じである他のすべての行に対して各行をチェックしたいと思います。どんな助けでも大歓迎です!

編集:明確にするために、私が求めている出力を次のように追加するだけです:

Tiger Woods    33%    33%    100%   0%     Buick Invitational 2006
Nathan Green   100%   0%     67%    0%     Buick Invitational 2006
J.M. Olazabal  0%     100%   0%     100%   Buick Invitational 2006
Arjun Atwal    67%    67%    0%     67%    Buick Invitational 2006

再度、感謝します。

4

2 に答える 2

0

面白いかもしれないと思ったので、ここにあなたが説明した正確な結果を与えるSQLがあります:

SELECT t.name, 
Format((Select Count(*) from [Table] where [Table].r1 > T.r1 And [Table].event = t.event)/3,"0%") as r1,
Format((Select Count(*) from [Table] where [Table].r2 > T.r2 And [Table].event = t.event)/3,"0%") as r2, 
Format((Select Count(*) from [Table] where [Table].r3 > T.r3 And [Table].event = t.event)/3, "0%") as r3, 
Format((Select Count(*) from [Table] where [Table].r4 > T.r4 And [Table].event = t.event)/3, "0%") as r4,
event
FROM [Table] as T;
于 2012-08-16T15:01:47.733 に答える
0

データが Table1 と呼ばれる MS Access テーブルに格納されている場合、以下の SQL でこれが実現されます。3 の代わりに count(*)-1 を使用することで、これを一般化して、競合他社が 4 人いるという仮定をなくすことができます。

以下を新しいクエリの SQL ビューに貼り付けます。

SELECT T.name, Sum(IIf(T2.r1>T.r1,1,0)*100/3), Sum(IIf(T2.r2>T.r2,1,0)*100/3), Sum(IIf(T2.r3>T.r3,1,0)*100/3), Sum(IIf(T2.r4>T.r4,1,0)*100/3)
FROM Table1 AS T, Table1 AS T2
GROUP BY T.name;
于 2012-08-16T15:15:54.387 に答える