给出一个包含columns(name, lat, lon, population, type)
的表,其中每个名称都有很多行,我想选择按名称分组的行,其中人口是最高的。如果我将自己限制在名称和人口范围内,下面的内容将会起作用
SELECT name, Max(population)
FROM table WHERE name IN ('a', 'b', 'c')
GROUP BY name;
但我希望其他列-lat, lon, type
-也出现在结果中。如何使用SQLite实现这一点?
3条答案
按热度按时间0ejtzxu11#
SQLite允许您只列出您想要的其他列;它们保证来自具有最大值的行:
文件中写道:
当聚合函数为min()或max()时,会进行特殊处理。示例:
在聚合查询中使用min()或max()聚合函数时,结果集中的所有裸列都从也包含最小值或最大值的输入行中获取值。
4jb9z9bj2#
对结果进行连接以获得完整表记录
vbopmzt13#
RANK
或ROW_NUMBER
窗口函数尽管如https://stackoverflow.com/a/48328243/895245所述,
max
保证可以在SQLite上运行,但以下方法似乎更便携、更具通用性:完全相同的代码可以在这两种代码上运行:
此外,我们可以轻松地修改该查询以涵盖以下用例:
ROW_NUMBER()
替换为RANK()
,则如果超过一行达到最大值,则返回max
的所有关联"sub"."rnk" = 1
替换为"sub"."rnk" <= n
,您可以获得每个组的前n名,而不仅仅是前1名