如何基于最小日期求和?

tvokkenx  于 2021-06-18  发布在  Mysql
关注(0)|答案(3)|浏览(288)

为学校做一个练习,试图计算篮球运动员在第一场比赛中的得分。
所以如果我有一张表,上面有很多比赛(上半场和下半场各有一行),看起来是这样的:

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

但它一直在计算所有比赛的得分,而不仅仅是第一场比赛的得分,其中上半场可能有一个记录,下半场可能有一个记录。

chhkpiq4

chhkpiq41#

你必须运用你的逻辑。首先,您只需要为每个玩家抓取第一个游戏(内部查询)。从那开始,你数点点数

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
xienkqul

xienkqul2#

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

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

然后在那场比赛中通过再次加入到table上来获得分数

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允许您使用排名函数,这可以消除连接到表本身的需要,但这将适用于所有种类。

pgvzfuti

pgvzfuti3#

下面给出了获得结果的子查询方法
过滤结果只得到玩家的第一场比赛。
按球员从篮球组中选择min(比赛日期);
使用第一次查询的结果来查找每个玩家在第一场比赛中的得分总和。
选择game\u date,player,sum(points)作为第一个\u play \u points from basketball where(game\u date,player)in(按game\u date,player从basketball group中选择min(game\u date),player)group by game\u date,player;
这里可以找到工作小提琴

相关问题