Разряд строки в MySQL View

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

> +--------+------------+-----+
> | id     | variety    | num |
> +--------+------------+-----+
> | 234    | fuji       |   1 |
> | 4356   | gala       |   2 |
> | 343245 | limbertwig |   3 |
> | 224    | bing       |   4 |
> | 4545   | chelan     |   5 |
> | 3455   | navel      |   6 |
> | 4534345| valencia   |   7 |
> | 3451   | bartlett   |   8 |
> | 3452   | bradford   |   9 |
> +--------+------------+-----+

Запрос:

SELECT id, 
       variety, 
       SOMEFUNCTIONTHATWOULDGENERATETHIS() AS num 
  FROM mytable
9
задан OMG Ponies 27 December 2009 в 02:02
поделиться

2 ответа

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

SELECT t.id,
       t.variety,
       (SELECT COUNT(*) FROM TABLE WHERE id < t.id) +1 AS NUM
  FROM TABLE t

Это не идеальный способ, так как запрос на числовое значение будет выполняться для каждой возвращаемой строки. Лучше было бы создать таблицу NUMBERS с одним столбцом, содержащим число, начинающееся с одного, которое увеличивается до возмутительно большого числа, а затем объединить и сослаться на таблицу NUMBERS таким же образом, как в примере переменной, который приведен ниже.

MySQL Ranking, или Lack Thereof

Вы можете определить переменную для получения функции psuedo number, потому что MySQL не имеет функций ранжирования:

SELECT t.id,
       t.variety,
       @rownum := @rownum + 1 AS num
  FROM TABLE t,
       (SELECT @rownum := 0) r
  • The SELECT @rownum := 0 определяет переменную и устанавливает ее в ноль.
  • rr является псевдонимом подзапроса/таблицы, потому что если вы не определите псевдоним для подзапроса, даже если вы его не используете, вы получите ошибку в MySQL.

Can't Use A Variable in a MySQL View

If you do, вы получите ошибку 1351, потому что нельзя использовать переменную в представлении из-за конструкции . Поведение ошибки/функции документировано здесь.

.
17
ответ дан 4 December 2019 в 10:04
поделиться

Оракул имеет рядовую псевдоколонку. В MySQL, возможно, придется пойти некрасиво:

SELECT id,
       variety,
       1 + (SELECT COUNT(*) FROM tbl WHERE t.id < id) as num
  FROM tbl

Этот запрос с верхней части моей головы и непроверенный, так что возьмите его с зерном соли. Также предполагается, что вы хотите нумеровать строки по каким-то критериям (в данном случае id), а не по произвольной нумерации, показанной в вопросе

.
4
ответ дан 4 December 2019 в 10:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: