-2

長い間使用していないため、SQLクエリを忘れてしまいました。

次の要件があります。チームが対戦した試合に関する競合他社の詳細を保持する、試合と呼ばれるテーブルを用意します。だからいくつかの重要な分野はこのようなものです

match_id
competior_id
match_winner_id
ismatchtied
goals_scored_my_team
goals_scored_comp

この表から、すべての競合他社の直接の情報を取得したいと思います。このような

Competitor Matches Wins Losses Draws 
A          10      5    4      1
B          8       3    2      1

ismatchtiedから取得できる描画情報は「Y」または「N」に設定されています。1つのクエリからすべての情報を取得したい。クエリを個別に実行することですべての情報を取得し、サーバーコードで複雑なロジック処理を実行できます。しかし、私のパフォーマンスは打撃を受けるでしょう。

どんな助けでも大歓迎です。

乾杯、サウラフ

4

2 に答える 2

0

m4.competitor_id、COUNT(*) を TotalMathces として選択し、

match( goals_scored_my_team>goals_scored_comp AND m1.competior_id=m4.competior_id) の m1から count(*)を WINS として選択し、

match( goals_scored_comp>goals_scored_my_team AND m2.competior_id=m4.competior_id) を LOSES として、m2から WIN として count(*) を選択します。

match( goals_scored_my_team=goals_scored_comp AND m3.competior_id=m4.competior_id の m3から WIN として count(*)を DRAWS として選択)

FROM matchm4 group by m4.competitor_id;

于 2012-11-07T17:34:27.227 に答える
0

次のように、集計関数内に CASE 式を含む条件付き集計を使用できます。

SELECT
  competitor_id,
  COUNT(*) AS Matches,
  COUNT(CASE WHEN goals_scored_my_team > goals_scored_comp THEN 1 END) AS Wins,
  COUNT(CASE WHEN goals_scored_my_team < goals_scored_comp THEN 1 END) AS Losses,
  COUNT(CASE WHEN goals_scored_my_team = goals_scored_comp THEN 1 END) AS Draws
FROM matches
GROUP BY
  competitor_id
;

条件が満たされない場合、上記のすべての CASE は NULL と評価されます。また、NULL を省略しているため、上記のクエリの every は、対応する WHEN 条件に一致する行のみを効果的にカウントします。COUNT(expr)COUNT(CASE ...)

したがって、最初の COUNT は、私のチームが競合他社に対してより多くの得点を挙げた行、つまり私のチームが勝った行のみをカウントします。同様に、2 番目と 3 番目の CASE は、負けと引き分けの数を取得します。

于 2012-11-07T20:59:04.947 に答える