Как отсортировать таблицу в sql
Перейти к содержимому

Как отсортировать таблицу в sql

  • автор:

ORDER BY-Сортировка в MySQL

За направление сортировки отвечают два пост префикса ASC / DESC .

ASC – (по умолчанию, необязательный). Сортирует набор выборки в порядке возрастания или по алфавиту.

DESC – сортирует в порядке убывания.

Сортировка запроса по нескольким столбцам

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

Сортировка запроса по определенной последовательности

С помощью функции FIELD() можно получить записи из БД в нужной последовательности, например вывести первыми записи с определенными `id` .

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

Сортировка по цене, но исключая нулевые значения

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

Сортировка по данным из другой таблицы

К примеру имеется таблица брендов и товаров, нужно отсортировать бренды по количеству товаров.

Сортировка в случайном порядке

Сортировка по дате

Обычно сортировка по дате выполняется как обычно с применением префиксов ASC или DESC, но если даты записаны в обычном текстовом формате, то их придётся перевести в тип datetime c помощью функции STR_TO_DATE() , указав нужный формат:

Проблемы при сортировке с разными тапами данных

Если в сортируемом поле содержатся одновременно текст и цифры, а нужно отсортировать только по цифрам, то данные нужно привести к числовому типу:

Как отсортировать таблицу в sql

Use the ORDER BY clause to order the rows selected by a query. Sorting by position is useful in the following cases:

To order by a lengthy select list expression, you can specify its position in the ORDER BY clause rather than duplicate the entire expression.

For compound queries containing set operators UNION , INTERSECT , MINUS , or UNION ALL , the ORDER BY clause must specify positions or aliases rather than explicit expressions. Also, the ORDER BY clause can appear only in the last component query. The ORDER BY clause orders all rows returned by the entire compound query.

The mechanism by which Oracle Database sorts character values for the ORDER BY clause, also known as the collation, is specified by the NLS_SORT session parameter. If this parameter is not set, then its default is derived from the NLS_LANGUAGE session parameter. You can change the collation dynamically using the ALTER SESSION SET NLS_SORT statement. You can also apply a specific collation by including the character expressions to be sorted as arguments to the NLSSORT function, with the collation specified in the second parameter.

When character values are compared linguistically for the ORDER BY clause, they are first transformed to collation keys and then compared like RAW values. The collation keys are generated either explicitly as specified in NLSSORT or implicitly using the same method that NLSSORT uses. Both explicitly and implicitly generated collation keys are subject to the same restrictions that are described in «NLSSORT» . As a result of these restrictions, two values may compare as linguistically equal if they do not differ in the prefix that was used to produce the collation key, even if they differ in the rest of the value.

ORDER BY. Сортировка данных в таблице БД MySQL

ORDER BY позволяет сортировать записи по одной или нескольким колонкам.

Сортировка возможна в восходящем или нисходящем порядке с помощью ключевых слов ASC и DESC .

По умолчанию используется восходящий порядок сортировки ( ASC ).

Синтаксис ORDER BY

mysql> SELECT column1, column2, . , columnN
-> FROM table_name
-> ORDER BY column1, column2, . , columnN ASC | DESC

Рассмотрим несколько примеров сортировки в таблице books из базы данных Bookstore.

Подключимся к базе данных.

Выведем записи таблицы books отсортированные по цене.

mysql> SELECT id, title, author, price
-> FROM books
-> ORDER BY price;
+—-+—————————+———————+———+
| id | title | author | price |
+—-+—————————+———————+———+
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 |
| 10 | Бесы | Фёдор Достоевский | 212.00 |
| 1 | Дубровский (Акция) | Александр Пушкин | 230.00 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 |
| 2 | Нос (Акция) | Николай Гоголь | 255.20 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 |
| 6 | Война и мир | Лев Толстой | 341.00 |
| 7 | Анна Каренина | Лев Толстой | 346.00 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 |
+—-+—————————+———————+———+
10 rows in set (0.00 sec)

Если нужно отсортировать в нисходящем порядке, то добавим ключевое слово DESC .

mysql> SELECT id, title, author, price
-> FROM books
-> ORDER BY price DESC ;
+—-+—————————+———————+———+
| id | title | author | price |
+—-+—————————+———————+———+
| 8 | Отцы и дети | Иван Тургенев | 371.00 |
| 7 | Анна Каренина | Лев Толстой | 346.00 |
| 6 | Война и мир | Лев Толстой | 341.00 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 |
| 2 | Нос (Акция) | Николай Гоголь | 255.20 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 |
| 1 | Дубровский (Акция) | Александр Пушкин | 230.00 |
| 10 | Бесы | Фёдор Достоевский | 212.00 |
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 |
+—-+—————————+———————+———+
10 rows in set (0.00 sec)

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

Выведем записи отсортированные по двум колонкам author и price.

mysql> SELECT id, title, author, price
-> FROM books
-> ORDER BY author, price DESC ;
+—-+—————————+———————+———+
| id | title | author | price |
+—-+—————————+———————+———+
| 1 | Дубровский (Акция) | Александр Пушкин | 230.00 |
| 8 | Отцы и дети | Иван Тургенев | 371.00 |
| 7 | Анна Каренина | Лев Толстой | 346.00 |
| 6 | Война и мир | Лев Толстой | 341.00 |
| 3 | Мастер и Маргарита | Михаил Булгаков | 263.00 |
| 9 | Собачье сердце | Михаил Булгаков | 232.00 |
| 2 | Нос (Акция) | Николай Гоголь | 255.20 |
| 4 | Мёртвые души (Акция) | Николай Гоголь | 173.00 |
| 5 | Преступление и наказание | Фёдор Достоевский | 245.00 |
| 10 | Бесы | Фёдор Достоевский | 212.00 |
+—-+—————————+———————+———+
10 rows in set (0.00 sec)

Сортировка данных таблицы MySQL с помощью PHP (PDO)

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

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

Сортировка SQL – Предложение ORDER BY

Примечание:
Во всех статьях текущей категории уроков по SQL используются примеры и задачи, основанные на учебной базе данных.

Приступая к изучению данного материала, рекомендуется ознакомиться с описанием учебной БД.

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

За упорядочивание строк, выгружаемых в SQL-запросе, отвечает предложение ORDER BY. Оно располагается в самом конце запроса:

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

Порядок сортировки в SQL

Возможны 2 варианта сортировки: по возрастанию и по убыванию. Для указания типа сортировки в запросе после названия столбца указывается ключевое слово ASC (ascending) или DESC (descending), которые определяют возрастающий либо убывающий порядок соответственно. По умолчанию используется тип ASC:

Также возможно указать разный порядок для разных столбцов:

Для закрепления материала решите задачу на учебной БД:

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

Пополним синтаксис оператора SELECT предложением ORDER BY (вертикальная черта означает необходимость выбора одного из вариантов):

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *