說我有一個sqlite數據庫中有兩個字段的表:名稱和年齡。從sqlite表檢索排名
Bob|40
Rob|50
Zek|60
如何查詢Zek的sqlite表,並確定他是最古老的?更一般地說,假設我擁有數百萬個姓名和年齡,並且我想要查詢特定條目,例如name =「Juju bear」,並且通過不同的字段查找條目的排名,例如, 「Juju熊」排名133455(按年齡)。
感謝,
科羅拉多
說我有一個sqlite數據庫中有兩個字段的表:名稱和年齡。從sqlite表檢索排名
Bob|40
Rob|50
Zek|60
如何查詢Zek的sqlite表,並確定他是最古老的?更一般地說,假設我擁有數百萬個姓名和年齡,並且我想要查詢特定條目,例如name =「Juju bear」,並且通過不同的字段查找條目的排名,例如, 「Juju熊」排名133455(按年齡)。
感謝,
科羅拉多
您可以使用子查詢來計算的人數與年齡較高,如:
select p1.*
, (
select count(*)
from People as p2
where p2.age > p1.age
) as AgeRank
from People as p1
where p1.Name = 'Juju bear'
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會自動添加一個索引列。這個列可以很好地作爲「等級」列加倍。
我意識到這是一個非常古老的問題,所以這個答案可能不會得到任何upvotes,但我張貼它,以防我的個人經驗可以幫助其他人面臨類似的挑戰。
再次感謝Andomar的原始答案 - 我想這對大多數人來說是最有幫助的。
我意識到你提供了一個簡化的例子 - 但存儲出生日期或年份,而不是年齡本身,並計算年齡。不要存儲年齡本身。如果我多次沒有看到這一點,我不會寫這個評論。 – Tim 2011-04-16 13:07:39
好點,年齡的變化不是嗎? – 2011-04-16 16:11:39