您如何根据MIN日期求和?

时间:2018-10-26 21:37:38

标签: mysql sql

正在为学校进行一项练习,试图仅计算篮球运动员在第一场比赛中获得的得分数。

所以,如果我有一个表,其中报告了很多游戏(第一排和第二半排单独的行),看起来像这样:

Game Date   Player  Half    Points
1990-01-01  Mike    1        10
1990-01-01  Mike    2        10
1990-01-03  Mike    1        5
1990-01-03  Ben     2        8
1990-01-05  Kelly   1        4
1990-01-05  Kelly   2        4
1990-01-07  Kelly   1        10

我希望它最终像这样:

Game Date   Player  Points
1990-01-01  Mike    20
1990-01-03  Ben     8
1990-01-05  Kelly   8

我该怎么做?

我一直在尝试使用代码:

SELECT min(game_Date), player, sum(points);

但是它一直在计算所有游戏的积分,而不仅仅是第一场比赛的得分,上半场可以有一个记录,第二场可以有一个记录。

3 个答案:

答案 0 :(得分:2)

首先,您需要找到玩家的第一个游戏,像这样

 select player, min(game_date) as firstGameDate
 from yourtable
 group by player

然后通过再次加入游戏桌来获得游戏中的分数

 select yourtable.player, firstgame.firstGameDate, sum(points) as firstGamePoints
 from yourtable
      inner join 
 (
 select player, min(game_date) as firstGameDate
 from yourtable
 group by player
 ) firstgame
      on yourtable.player = firstgame.player
      and yourtable.game_date = firstgame.firstgameDate
 group by yourtable.player, firstgame.firstgameDate

SQL的某些变体允许您使用排名函数,这些函数可以消除联接表本身的需要,但这在所有变体中均适用。

答案 1 :(得分:1)

您必须使用自己的逻辑。首先,您只需要为每个玩家抓取第一个游戏(内部查询)。然后从那里开始计算点数

SELECT t.game_date, t.player, SUM(t.points)
FROM some_table t
JOIN (
    SELECT player, MIN(game_date) AS min_date
    FROM some_table
    GROUP BY player
) a ON a.plyer = t.player AND a.min_date = t.game_date
GROUP BY t.player, t.game_date

答案 2 :(得分:0)

下面给出获取结果的子查询方法

  1. 过滤结果,仅获得玩家的第一场比赛。
  

选择分钟(游戏日期),玩家从        篮球运动员分组;

  1. 使用第一个查询的结果来查找每个玩家在第一场比赛中的得分总和。
  

从以下位置选择Game_Date,Player,sum(points)作为first_play_points   篮球(选择分钟(Game_Date),Player中的(Game_date,Player)   来自篮球组(按玩家分组)和按Game_Date,玩家分组;

工作中的小提琴enter image description here