简体   繁体   English

计算查询中的分钟数

[英]calculating the amount of minutes in a query

I'm looking for a way to count the amount of minutes each player (or here just one) in my team has played.我正在寻找一种方法来计算我团队中每个球员(或这里只有一个)的上场时间。 Simplified database table is as follows:简化后的数据库表如下:

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

The query I have right now for the other stats:我现在对其他统计数据的查询:

$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");

For every matchid the basic calculation is对于每个 matchid,基本计算是

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

For example in match 2例如在比赛 2

subbedout (50) - starter (0) = 50

In the end the table should looke like this:最后,该表应如下所示:

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

I've been going through tutorials for the past hour and can't seem to figure out how to do it.在过去的一个小时里,我一直在学习教程,但似乎不知道该怎么做。

  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

I would first calculated minutes played by every player for every match, add them up to obtain the totals per player.我会先计算每个球员在每场比赛中的上场时间,然后将它们加起来得到每个球员的总分。 To combine the obtained results with the other stats you are calculating, I can see no other way than to do the other stats in the same way, ie first per player & match, then per player.要将获得的结果与您正在计算的其他统计数据相结合,我认为除了以相同的方式计算其他统计数据之外别无他法,即首先是每个球员和比赛,然后是每个球员。 Here's what I mean:这就是我的意思:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM