为学校做一个练习,试图计算篮球运动员在第一场比赛中的得分。
所以如果我有一张表,上面有很多比赛(上半场和下半场各有一行),看起来是这样的:
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条答案
按热度按时间chhkpiq41#
你必须运用你的逻辑。首先,您只需要为每个玩家抓取第一个游戏(内部查询)。从那开始,你数点点数
xienkqul2#
首先你需要找到玩家的第一个游戏,就像这样
然后在那场比赛中通过再次加入到table上来获得分数
一些种类的sql允许您使用排名函数,这可以消除连接到表本身的需要,但这将适用于所有种类。
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;
这里可以找到工作小提琴