从sqlite表中检索Rank

时间:2011-04-15 22:20:01

标签: sql sqlite

假设我在sqlite数据库中有一个表,其中包含两个字段:name和age。

Bob|40
Rob|50
Zek|60

如何查询zek的sqlite表并确定他是最老的?更一般地说,我说有数百万的名字和年龄,我想查询一个特定的条目,比如name =“Juju bear”,并找到不同字段的条目等级,例如“Juju bear”排名133455(按年龄划分)。

谢谢,

科罗拉多

2 个答案:

答案 0 :(得分:18)

您可以使用子查询来计算年龄较大的人数,例如:

select  p1.*
,       (
        select  count(*) 
        from    People as p2
        where   p2.age > p1.age
        ) as AgeRank
from    People as p1
where   p1.Name = 'Juju bear'

答案 1 :(得分:4)

Andomar的回答很好,几乎可以肯定它仍然是这个问题的选定答案。那说......

我发现当我试图将其插入Andomar的解决方案时,我运行的复杂查询变得笨拙,所以出于绝望,我尝试使用类似下面的代码:

CREATE TABLE DoughnutShopCountsByHood AS 
SELECT Neighborhood, COUNT(*) AS DoughnutShopCount FROM 
(  <<crazy-set-of-painful-subqueries-removed>>  )
GROUP BY Neighborhood ORDER BY DoughnutShopCount DESC;

重要的部分是第一行中的“CREATE TABLE ... AS”部分。我已经计划将其作为几步中的第一步,但至少在Firefox的SQLite Manager中,我惊喜地发现当我将可疑的长查询转储到新表中时,RDBMS只是自动添加索引列。这个列很好地兼作“排名”列。

我意识到这是一个非常古老的问题,所以这个答案可能不会得到任何赞成,但我发布它以防万一我的个人经历可以帮助其他类似挑战的人。

再次感谢Andomar的原始答案 - 我想这对大多数人来说是最有帮助的。