Я пытаюсь получить столбец последовательного числа, возвращенный с моим SQL-запросом. Мне нужно, чтобы это было внутри оператора SELECT, потому что я хочу вложить этот запрос в другой, а затем использовать столбец, сгенерированный ранее, для дальнейших вычислений.
Я везде искал, и я не могу найти примеров этого.
Что-то в виду следующего:
SELECT *, ROW_NUMBER() as row_number from my_awesome_table;
Это должно создать что-то вроде этого:
row_number some_column some_other_column ---------- ----------- ----------------- 1 bla bla bla bla bla 2 bla bla bla bla bla 3 bla bla bla bla bla 4 bla bla bla bla bla
Обратите внимание, что some_column и some_other_column являются реальными существующими столбцами в my_awesome_table, тогда как row_number генерируется «на лету» только для этого запроса.
Благодаря! свинья
Вам нужно использовать переменные пользователя MySQL . Возьмем переменную t1
. Инициализируйте его на 0
. И увеличивайте его в каждом выбранном значении.
SET @t1=0; SELECT @t1 := @t1+1 as row_number, my_awesome_table.* from my_awesome_table
Это сделает трюк.
Мой любимый способ сделать то, что предложили несколько других людей:
SELECT @rownum := (IFNULL(@rownum, 0) + 1), my_awesome_table.* FROM my_awesome_table
Вы должны быть осторожны, используя пользовательские переменные в вашем SELECT, хотя. Как отмечают документы ,
«В SELECT @a, @a: = @ a + 1, …, вы можете подумать, что MySQL сначала оценит @a, а затем выполнит второе задание. Однако изменение инструкции (например, путем добавления GROUP BY , HAVING или ORDER BY) может заставить MySQL выбрать план выполнения с другим порядком оценки ».
Различные версии MySQL могут давать разные результаты. Проверьте соответственно и рассмотрите нумерацию строк в коде, а не в запросе.
SELECT @rownum = @rownum + 1 AS row_number, mat.* FROM my_awesome_table mat, (SELECT @rownum := 0) r
MySQL этого не делает.
Маленький поисковик нашел эту статью:
http://explainextended.com/2009/09/14/mysql-emulating-row_number-with-multiple-order-by-conditions/