2015-10-24 4 views
0

Если я могу увеличивать переменную в запросе, чтобы добавить столбец ранга, как, например:Сброс переменной внутри подзапроса

SET @i = 0; 
SELECT *, @i:[email protected]+1 AS rank FROM table WHERE column="value" ORDER BY time; 

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

+0

вы создаете переменную @grp, и когда она меняется (вы заказываете групповое дело, например, категорию или что-то еще, то вы, возможно, увеличиваете 3-ю переменную). Часто у вас есть производная таблица с псевдонимом – Drew

+0

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

ответ

1

Если вы хотите порядковый номер для каждого столбца (в моде row_number() в большинстве других баз данных), вы можете использовать переменные:

SELECT t.*, 
     (@i := if(@c = column, @i + 1, 
        if(@c := column, 1, 1) 
       ) 
     ) as rank 
    FROM table t CROSS JOIN 
     (SELECT @i := 0, @c := '') params 
    ORDER BY column, time; 
+0

Это именно то, что я искал. Спасибо! – tenub