В MSSQL есть функция ROW_NUMBER(), которая нумерует строки выборки. В MySQL такой функции пока нет, но мы можем использовать трюк с переменными для достижения нужного эффекта.
К примеру, вы хотите выбрать название книг и пронумеровать список. Изначально запрос выглядит как то так:
|
|
SELECT book_title FROM books; |
Так как специализированной функции нет, используем в запросе переменную.
|
|
SELECT @count := @count + 1, book_title FROM books, (SELECT @count := 0) r; |
Подзапрос (SELECT @count := 0) выполняет роль не только инициализации переменной @count, но так же и временного хранилища.
Если вы попробуете избавиться от подзапроса, например так:
|
|
SELECT @count := IFNULL(@count, 0) + 1, book_title FROM books; |
то нужного эффекта достичь не удастся, т.к. переменная будет создаваться для каждой строки независимо и все строки получат номер 1.
MySQL
Данная запись опубликована в 24.04.2023 12:48 и размещена в рубрике SQL.
Вы можете перейти в конец страницы и оставить ваш комментарий.
Мало букафф? Читайте есчо !
Сентябрь 30, 2018 г.
Группировка по полю, содержащему число, используется значительно чаще, чем группировка по текстовому полю. Я думаю, вы использовали функции вроде AVG(), ...
Читать
Май 15, 2016 г.
Есть один феномен, связанный с внутренней сортировкой в mySQL, которая служит для реализации функционала DISTINCT (выбора уникальных значений). Если вы ...
Читать
Ноябрь 11, 2019 г.
По умолчанию для mysqldump требуются права пользователя на блокировку таблиц.
Потому, когда вы создаёте бекапы, вы можете получить сообщение вроде:
mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DATABASENAME'" when ...
Читать
Февраль 16, 2023 г.
Появляется, если поле типа datetime уже содержит подобные нулевые значения при попытке изменить как тип поля (через alter table), так и сами значения в таблице.
Вероятно ошибка возникает, если вы импортировали данные в вашу базу. Скорее всего из-за ...
Читать