正在为学校进行一项练习,试图仅计算篮球运动员在第一场比赛中获得的得分数。
所以,如果我有一个表,其中报告了很多游戏(第一排和第二半排单独的行),看起来像这样:
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);
但是它一直在计算所有游戏的积分,而不仅仅是第一场比赛的得分,上半场可以有一个记录,第二场可以有一个记录。
答案 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)