3

チーム内の各プレーヤー(またはここでは1人)がプレイした分数をカウントする方法を探しています。簡略化されたデータベーステーブルは次のとおりです。

matchid    action    minute    player
-------------------------------------
1          subbedin  30        Pele 
2          starter             Pele
2          subbedout 50        Pele
3          subbedin  70        Pele
3          red       80        Pele
4          starter             Pele

私が今持っている他の統計のクエリ:

$query = mysql_query("SELECT *,
  SUM(CASE WHEN action = 'starter' OR action = 'subbedin' THEN 1 ELSE 0 END) AS games,
  SUM(CASE WHEN action = 'goal' OR action = 'pengoal' THEN 1 ELSE 0 END) AS goals,
  SUM(CASE WHEN action = 'yellow' THEN 1 ELSE 0 END) AS yellows,
  SUM(CASE WHEN action = 'red' THEN 1 ELSE 0 END) AS reds,
  // MINS GOES HERE
FROM league2012
GROUP BY player");

すべてのmatchidについて、基本的な計算は次のとおりです。

( 90 OR subbedout OR red ) - ( starter OR subbedin )

たとえば、マッチ2で

subbedout (50) - starter (0) = 50

最終的に、テーブルは次のようになります。

player    minutes    goals, cards, etc.
---------------------------------------
Pele      210        ...

私は過去1時間チュートリアルを行ってきましたが、その方法がわからないようです。

4

2 に答える 2

3
  sum
    (
      case action
        when 'subbedin'  then 90 - minute
        when 'starter'   then 90
        when 'subbedout' then minute - 90
        when 'red'       then minute - 90
      end
    ) as minutes
于 2012-04-07T20:17:42.783 に答える
1

まず、すべての試合ですべてのプレーヤーがプレイした分を計算し、それらを合計してプレーヤーごとの合計を取得します。得られた結果をあなたが計算している他の統計と組み合わせるために、私は同じ方法で他の統計を行う以外の方法を見ることができません、すなわち最初にプレーヤーと試合ごとに、次にプレーヤーごとに。これが私が意味することです:

SELECT
  player,
  SUM(games) AS games,
  SUM(goals) AS goals,
  SUM(yellows) AS yellows,
  SUM(reds) AS reds,
  SUM(minutesplayed) AS minutesplayed
FROM (
  SELECT
    player,
    matchid,
    SUM(CASE WHEN action IN ('starter', 'subbedin') THEN 1 ELSE 0 END) AS games,
    SUM(CASE WHEN action IN ('goal', 'pengoal') THEN 1 ELSE 0 END) AS goals,
    SUM(CASE WHEN action = 'yellow' THEN 1 ELSE 0 END) AS yellows,
    SUM(CASE WHEN action = 'red' THEN 1 ELSE 0 END) AS reds,
    IFNULL(SUM(CASE WHEN action IN ('subbedout', 'red') THEN minute END), 90)
    - IFNULL(SUM(CASE WHEN action = ('subbedin') THEN minute END), 0) AS minutesplayed
  FROM league2012
  GROUP BY
    player,
    matchid
) s
GROUP BY
  player
于 2012-04-07T20:16:01.677 に答える