Получить рейтинг из таблицы sqlite - PullRequest
8 голосов
/ 16 апреля 2011

Скажем, у меня есть таблица в базе данных sqlite с двумя полями: имя и возраст.

Bob|40
Rob|50
Zek|60

Как я могу запросить таблицу sqlite для Zek и определить, что он самый старый?В общем, скажем, у меня есть миллионы имен и возрастов, и я хочу запросить определенную запись, скажем name = "Juju bear", и найти ранг записи в другом поле, например, что "Juju bear" имеет рейтинг 133455 (по возрасту).

Спасибо,

Колорадо

Ответы [ 2 ]

18 голосов
/ 16 апреля 2011

Вы можете использовать подзапрос для подсчета числа людей более старшего возраста, например:

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 голосов
/ 16 июля 2015

Ответ Андомара хороший, и он почти наверняка останется выбранным ответом на этот вопрос. Тем не менее ...

Я обнаружил, что сложный запрос, который я выполнял, быстро стал громоздким, когда я попытался вставить его в решение 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" в первой строке. Я планировал, что это будет первым из нескольких шагов, но, по крайней мере, в SQLite Manager в Firefox, я был приятно удивлен, обнаружив, что когда я выкинул свой смехотворно длинный запрос в новую таблицу, СУБД просто добавила столбец индекса автоматически. Этот столбец хорошо дублируется как столбец «ранг».

Я понимаю, что это действительно старый вопрос, так что этот ответ, вероятно, не получит никаких голосов, но я публикую его на тот случай, если мой личный опыт может помочь кому-то еще с подобной проблемой.

Еще раз спасибо Andomar за оригинальный ответ - я думаю, он самый полезный для большинства людей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...