选择多个最大值?在Sqlite?

时间:2017-05-06 07:48:48

标签: sqlite

超级新的SQLite,但我认为这不会有问题。

我有类似下表的表格(不允许发布图片)从多个表中提取数据来计算总分数:

Name       TotalScore
Course1       15
Course1       12
Course2        9
Course2       10

我是如何选择每门课程的最大值?我已经管理好了

ORDER BY TotalScore LIMIT 2

但我最终可能会在我的最终产品中使用多个课程,因此LIMIT 2等对我没有帮助。

思考?如果它有帮助,很高兴提出我的其余查询?

2 个答案:

答案 0 :(得分:5)

您可以GROUP Name结果集,然后使用汇总函数MAX()

SELECT Name, max(TotalScore)
FROM my_table
GROUP BY Name

每个不同的课程将获得一行,第1列中的名称和第2列中此课程的最大总分数。

进一步提示

您只能SELECT列按(Name)分组或包含在汇总函数(max(TotalScore))中的列。如果您在结果集中需要其他列(例如Description),则可以按多个列进行分组:

...
GROUP BY Name, Description

要进一步过滤生成的行,您需要使用HAVING代替WHERE

SELECT Name, max(TotalScore)
FROM my_table
-- WHERE clause would be here
GROUP BY Name
HAVING max(TotalScore) > 5

WHERE过滤原始表格行,HAVING过滤生成的分组行。

答案 1 :(得分:1)

maxsum等函数是“聚合函数”,意味着它们将多行聚合在一起。通常他们会将它们合并为一个值,例如max(totalscore),但您可以使用group by将它们聚合为多个值。 group by说明了如何将行组合成聚合。

select name, max(totalscore)
from scores
group by name;

这会将所有列组合在一起并使用相同的名称,然后为每个名称执行max(totalscore)

sqlite> select name, max(totalscore) from scores group by name;
Course1|15
Course2|12