sql вывод в виде рейтинга

Если у меня есть таблица случайных значений в таблице sql, как я могу экспортировать и отображать их как грабли, а не как абсолютное значение ... например ... если три значения - 30, 85 и 90, как мне получить 30? отображать как 1 или 1, 85 как 2 или 2 и т. д.


person adam    schedule 20.10.2010    source источник
comment
возможный дубликат Как лучше всего генерировать ранги в MYSQL?   -  person JohnFx    schedule 20.10.2010


Ответы (2)


MySQL не поддерживает аналитические функции (ROW_NUMBER, RANK, DENSE_RANK), которые обычно используются для подобных требований.

Использовать:

  SELECT @rownum := @rownum + 1 AS ranking
    FROM YOUR_TABLE t
    JOIN (SELECT @rownum := 0) r
ORDER BY t.value

Пример:

  SELECT x.num,
         @rownum := @rownum + 1 AS ranking
    FROM (SELECT 30 AS num
          UNION ALL
          SELECT 85
          UNION ALL
          SELECT 90) x
    JOIN (SELECT @rownum := 0) r
ORDER BY x.num

Вы можете использовать:

SELECT (SELECT COUNT(*)
          FROM YOUR_TABLE b
         WHERE b.value <= a.value) AS ranking
  FROM YOUR_TABLE a

... но дубликаты будут иметь одинаковое ранжирование. И вы должны убедиться, что сравнение значений идет в правильном направлении.

person OMG Ponies    schedule 20.10.2010

Пытаться:

set @i = 0;
select myValue,
        @i:=@i+1 as Ranking
from myTable 
order by myValue ASC
person p.campbell    schedule 20.10.2010
comment
Вы, наверное, хотите, чтобы там был ORDER BY myValue ASC. - person Byron Whitlock; 20.10.2010