2010-10-20 2 views
0

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

+0

Возможный дубликат [Что является лучшим способом создания рангов в MYSQL?] (Http://stackoverflow.com/questions/431053/what-is-the-best-way-to-generate-ranks-in- mysql) – JohnFx

ответ

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 

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

1

Try:

set @i = 0; 
select myValue, 
     @i:[email protected]+1 as Ranking 
from myTable 
order by myValue ASC 
+0

Возможно, вы захотите «ORDER BY myValue ASC». –

+0

@Byron @JohnFx: действительно, спасибо! –