2011-04-15 26 views
8

İki alanlı bir sqlite DB'de bir tablo var mı: ad ve yaş.Alıntı sqlite tablosundan alma

Bob|40 
Rob|50 
Zek|60 
Ben Zek için sqlite tablo sorgulamak ve o eski olduğunu belirleyebilir nasıl

? Daha genel olarak, milyonlarca isimde ve yaşımda olduğunu ve belirli bir girişi sorgulamak istediğimi söyleyeyim, adı = "Juju ayı" deyin ve girişin rütbesini farklı bir alanla, ör. Bu "Juju ayı" 133455 (yaş) olarak sıralanır.

sayesinde

Colorado

Sen gibi yüksek bir yaş kişi sayısını saymak için bir alt sorgu kullanabilirsiniz
+4

Basitleştirilmiş bir örnek sağladığınızı anlıyorum - ancak yaşı veya yaşını değil, doğum tarihini veya yılını saklayın. Yaşı kendinde saklamayın. Bunu birkaç kez yapmış olmasaydım, bu yorumu yazmazdım. – Tim

+0

İyi nokta, yaş değişiyor değil mi? –

cevap

16

:

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

Andomar cevabı iyi biridir ve olması gerektiği Bu soru için seçilen cevap neredeyse kesin olarak kalıyor.

CREATE TABLE DoughnutShopCountsByHood AS 
SELECT Neighborhood, COUNT(*) AS DoughnutShopCount FROM 
( <<crazy-set-of-painful-subqueries-removed>> ) 
GROUP BY Neighborhood ORDER BY DoughnutShopCount DESC; 
: Ben Andomar çözümüyle içine ayakkabı çekeceği çalıştı

Öyle çaresizlikten, şu kod gibi bir şey kullanarak çalıştı, Koşuyordum karmaşık bir sorgu hızla hantal hale geldiği sonucuna varıldı ... dedi

Önemli olan ilk satırda "CREATE TABLE ... AS" bölümüdür. Birkaç adımın ilki olmak için bunu planlamıştım, ama en azından Firefox'un SQLite Manager'ında gülünç uzun süren bir sorguyu yeni bir tablonun içine döktüğümde, RDBMS'nin otomatik olarak bir indeks sütunu eklediğini fark ettim. Bu sütun, bir "rank" sütunu olarak güzel bir şekilde iki katına çıkar.

Bunun gerçekten eski sorudur gerçekleştirmek, bu nedenle bu cevap muhtemelen herhangi upvotes almazsınız ama benzer bir meydan okuma ile başkası yardımcı olabilir benim kişisel deneyim durumda göndermeden ediyorum.

Orijinal cevap için Andomar'a tekrar teşekkürler - Çoğu insan için en yararlı olanı hayal ediyorum.