На сайте первая вещь Вы читали бы когда начало работы списки все Ваши текущие опции. Существует netbeans дополнение , emacs режим и синтаксис энергии выделение.
Если вам нужен ранг, сделайте что-нибудь вроде
SELECT id,num,rank FROM (
SELECT id,num,rank() OVER (ORDER BY num) FROM foo
) AS bar WHERE id=4
Или, если вам действительно нужен номер строки, используйте
SELECT id,num,row_number FROM (
SELECT id,num,row_number() OVER (ORDER BY num) FROM foo
) AS bar WHERE id=4
Они будут отличаться, если у вас где-то будут одинаковые значения. Если вам это нужно, есть также elastic_rank ().
Для этого, конечно же, требуется PostgreSQL 8.4.
Разве это не так:
SELECT *
FROM mytable
ORDER BY
col1
OFFSET X LIMIT 1
Или мне что-то не хватает?
Обновление:
Если вы хотите показать ранг, используйте это:
SELECT mi.*, values[1] AS rank, values[2] AS total
FROM (
SELECT (
SELECT ARRAY[SUM(((mi.col1, mi.ctid) < (mo.col1, mo.ctid))::INTEGER), COUNT(*)]
FROM mytable mi
) AS values
FROM mytable mo
WHERE mo.id = @myid
) q
Предыдущие ответы решают вопрос «выберите все строки и получите их рейтинг», который вам не подходит хотите ...
Просто выполните:
SELECT count (*) FROM table WHERE score> $ 1
Где $ 1 - это оценка строка, которую вы только что выбрали (я полагаю, вы хотите отобразить ее, чтобы вы могли ее выбрать ...).
Или выполните:
SELECT a. , (SELECT count () FROM table b WHERE score> b.score) AS rank FROM table AS a WHERE pk = ...
Однако , если вы выберете строку, которая ранжируется последней, да, вам нужно будет подсчитать все строки, ранжированные перед ней, Кого волнуют проигравшие?
Хорошо, если вы действительно заботитесь о проигравших, вам нужно будет построить гистограмму:
Предположим, оценка может идти от 0 до 100, и у вас есть 1000000 проигравших со счетом <80 и 10 победителей со счетом> 80.
Вы составляете гистограмму того, сколько строк имеют оценку X, это простая небольшая таблица со 100 строками. Добавьте триггер в свою основную таблицу для обновления гистограммы.
Теперь, если вы хотите ранжировать проигравшего, у которого есть оценка X, его ранг равен сумме (гисто), где histo_score> X.
Поскольку ваш результат, вероятно, не между 0 и 100, но (скажем) между 0 и 1000000000, вам нужно немного подправить его, например, увеличить ячейки гистограммы. так что вам нужно не более 100 ячеек или использовать какую-нибудь функцию распределения лог-гистограмм.
Кстати, postgres делает это, когда вы АНАЛИЗИРУете таблицу,
ROW_NUMBER
функциональность в PostgreSQL реализуется через LIMIT n OFFSET skip
.
РЕДАКТИРОВАТЬ: Поскольку вы запрашиваете ROW_NUMBER ()
вместо простого ранжирования: row_number ( )
представлен в PostgreSQL в версии 8.4. Так что вы можете подумать об обновлении. В противном случае этот обходной путь может оказаться полезным.