超级新的SQLite,但我认为这不会有问题。
我有类似下表的表格(不允许发布图片)从多个表中提取数据来计算总分数:
Name TotalScore
Course1 15
Course1 12
Course2 9
Course2 10
我是如何选择每门课程的最大值?我已经管理好了
ORDER BY TotalScore LIMIT 2
但我最终可能会在我的最终产品中使用多个课程,因此LIMIT 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)
max
和sum
等函数是“聚合函数”,意味着它们将多行聚合在一起。通常他们会将它们合并为一个值,例如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