2

我有一个这样的查询:

SELECT PlayerID, COUNT(PlayerID) AS "MatchesPlayed", Name, Role, Team,
       SUM(Goals) As "TotalGoals", SUM(Autogoals) As "TotalAutogoals",
       SUM(...)-2*SUM(...)+2*SUM(...) AS Score, ...
FROM raw_ordered
GROUP BY PlayerID
ORDER BY Score DESC

其中raw_ordered每一行描述了一些球员在一些比赛中的表现,按时间倒序排列。

因为我是PlayerID按照从这个查询中得到的信息进行分组,所以我是一个表格,其中每一行都提供了关于某个玩家的累积数据。现在,具有聚合函数的列没有问题;我的问题出在Team专栏上。

球员可以在一个赛季中更换球队;我在这里感兴趣的是他玩的最后一个 Team,所以我想有一种方法来告诉SELECT每个组中遇到的第一个值对于Team列(或者,一般来说,对于非聚合函数列)。

不幸的是,我似乎没有在 SQLite 中找到任何(简单的)方法来做到这一点:文档SELECT

如果表达式是聚合表达式,则会在组中的所有行中对其进行评估。否则,将根据组内任意选择的单个行对其进行评估

没有关于如何改变这种行为的建议,而且我在聚合函数之间找不到任何只接受它遇到的第一个值的东西。

任何想法?

4

2 回答 2

1

SQLite 没有“第一”聚合函数;你必须自己实现它。

但是,文档已过时。从 SQLite 3.7.11 开始,如果有MIN()or MAX(),则保证选择来自该最小值/最大值的记录。

因此,只需添加MAX(MatchDate)SELECT列列表中。

于 2012-11-11T19:44:40.430 回答
0
SELECT PlayerID, COUNT(PlayerID) AS "MatchesPlayed", Name, Role, 
(SELECT Team FROM raw_ordered GROUP BY PlayerID ORDER BY some_date) AS team,
SUM(Goals) As "TotalGoals", SUM(Autogoals) As "TotalAutogoals",
SUM(...)-2*SUM(...)+2*SUM(...) AS Score, ...
FROM raw_ordered
GROUP BY PlayerID
ORDER BY Score DESC

大概您在表中有某种方式可以对输出进行排序,以便您可以使用子查询来实现您的目标。

于 2012-11-11T18:39:01.663 回答