假设我在sqlite数据库中有一个表,其中包含两个字段:name和age。
Bob|40
Rob|50
Zek|60
如何查询zek的sqlite表并确定他是最老的?更一般地说,我说有数百万的名字和年龄,我想查询一个特定的条目,比如name =“Juju bear”,并找到不同字段的条目等级,例如“Juju bear”排名133455(按年龄划分)。
谢谢,
科罗拉多
答案 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的原始答案 - 我想这对大多数人来说是最有帮助的。