Подтвердить что ты не робот

Генерировать серийный номер в запросе mysql

У меня есть таблица: student_marks

marks
-----
  44
  55
  64
  98
  76

Ожидаемый результат:

serial_number|marks
--------------------
  1          | 44
  2          | 55
  3          | 64
  4          | 98
  5          | 76

Используя пользовательские переменные mysql, это можно сделать с помощью запроса:

 set  @a:=0;select @a:[email protected]+1 serial_number, marks from student_marks;

Есть ли способ достичь этого в msyql без использования пользовательских переменных?

4b9b3361

Ответ 1

Исходя из ваших причин не желать использовать переменные, определенные пользователем, так как вам нужно иметь 2 запроса, один для инициализации и один для его использования, вы можете использовать следующее:

SELECT  @a:[email protected]+1 serial_number, 
        marks 
FROM    student_marks,
        (SELECT @a:= 0) AS a;

Ответ 2

Лучший ответ на этот вопрос должен быть следующим: наилучшая практика

SET @count:=0;
SELECT  (@count:[email protected]+1) AS serial_number, 
        marks 
FROM    student_marks

Ответ 3

Нет, нет. Но вы можете создать serial_number в стороне программы, а не на стороне базы данных.

Ответ 5

У меня была таблица с столбцом (c5), содержащая число x, мне нужно выражение sql, которое повторяло ту же строку x чисел раз:

В моей таблице A содержится:

c1  c2  c3  c4  c5
16  1   2   16  3
16  1   2   17  2 
16  1   2   18  1

и мне нужно:

c1  c2  c3  c4  c5  n
16  1   2   16  3   1
16  1   2   16  3   2
16  1   2   16  3   3
16  1   2   17  2   1
16  1   2   17  2   2
16  1   2   18  1   1

Я решил, что с выражением:

SELECT
    c1, c2, c3, c4, c5, row_number AS n
FROM
    (
        SELECT
            @curRow := @curRow + 1 AS row_number
        FROM
            tablea
        JOIN (SELECT @curRow := 0) r
        WHERE
            @curRow < (
                SELECT
                    max(field1)
                FROM
                    tablea
            )
    ) AS vwtable2
LEFT JOIN tablea d ON vwtable2.row_number <= tablea.field1;

Ответ 6

Нет, если у вас нет столбца, содержащего эти числа.

Ответ 7

Хотя очень поздно для ответа, генерируя последовательные идентификаторы без двух запросов и без использования объединений и без использования подпроса.

SELECT *, (@cnt := if(@cnt IS NULL, 0,  @cnt) + 1) AS id FROM table_name;

Приветствия