sql сортировка цифр в текстовом поле

Сортировка данных в SQL (ORDER BY)

При выборке данных бывает важно получить их в определенном упорядоченном виде. Сортировка может быть выполнена по любым полям с любым типом данных. Это может быть сортировка по возрастанию или убыванию для числовых полей. Для символьных (текстовых) полей это может быть сортировка в алфавитном порядке, хотя по сути, она так же является сортировкой по возрастанию или убыванию. Она так же может быть выполнена в любых направлениях – от А, до Я, и наоборот от Я, до А.

Суть процесса сортировки заключается к приведению последовательности к определенному порядку. Подробней о сортировки можно узнать в статье «Алгоритмы сортировки». Например, сортировка произвольной числовой последовательности по возрастанию:

должна привести к упорядоченной последовательности:

Аналогично, при сортировке по возрастанию строковых значений:

Иванов Иван, Петров Петр, Иванов Андрей

результат должен быть:

Иванов Андрей, Иванов Иван, Петров Петр

Здесь строка «Иванов Андрей» перешла в начало, так как сравнение строк производится посимвольно. Обе строки начинаются одинаковых символов «Иванов «. Так как символ «А» в слове «Андрей» идет раньше в алфавите, чем символ «И» в слове «Иван», то эта строка будет поставлена раньше.

Сортировка в запросе SQL

Для выполнения сортировки в строку запроса нужно добавить команду ORDER BY. После этой команды указывается поле, по которому производится сортировка.

Для примеров используем таблицу товаров goods:

num
(номер товара)
title
(название)
price
(цена)
1 Мандарин 50
2 Арбуз 120
3 Ананас 80
4 Банан 40

Данные здесь уже упорядочены по столбцу «num». Теперь, построим запрос, который выведет таблицу с товарами, упорядоченными в алфавитном порядке:

SELECT * FROM goods – указывает выбрать все поля из таблицы goods;

ORDER BY – команда сортировки;

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

Результат выполнения такого запроса следующий:

num title price
3 Ананас 80
2 Арбуз 120
4 Банан 40
1 Мандарин 50

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

Направление сортировки

По умолчанию, команда ORDER BY выполняет сортировку по возрастанию. Чтобы управлять направлением сортировки вручную, после имени столбца указывается ключевое слово ASC (по возрастанию) или DESC (по убыванию). Таким образом, чтобы вывести нашу таблицу в порядке убывания цен, нужно задать запрос так:

Сортировка по возрастанию цены будет:

Сортировка по нескольким полям

SQL допускает сортировку сразу по нескольким полям. Для этого после команды ORDER BY необходимые поля указываются через запятую. Порядок в результате запроса будет настраиваться в той же очередности, в которой указаны поля сортировки.

column1 column2 column3
3 1 c
1 3 c
2 2 b
2 1 b
1 2 a
1 3 a
3 4 a

Отсортируем таблицу по следующим правилам:

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

column1 column2 column3
1 3 a
1 3 c
1 2 a
2 2 b
2 1 b
3 1 a
3 1 c

Порядок команды ORDER BY в запросе

Сортировка строк чаще всего проводится вместе с условием на выборку данных. Команда ORDER BY ставится после условия выборки WHERE. Например, выбираем товары с ценой меньше 100 рублей, упорядочив по названию в алфавитном порядке:

Читайте также:  Как подключить рацию в авто

Источник

Урок 4. Сортировка результатов

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

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

Совершеннолетние пользователи
id last_name first_name birthday
1 Иванов Дмитрий 1996-12-11
3 Шевченко Тимур 1998-04-27
4 Иванова Светлана 1993-08-06
6 Иванов Алексей 1993-08-05
7 Процук Алена 1997-02-28

Обратите внимание, что сейчас данные никак не упорядочены. Ни по фамилии, ни по имени, ни по дате рождения. Но давайте добавим после конструции WHERE: ORDER BY last_name:.

После выполнение данного SQL запроса мы получим таблицу отсортированную по столбцу last_name (фамилия). Так как last_name хранит строки, то сортировка происходит в алфавитном порядке:

Сортировка по фамилии
id last_name first_name birthday
1 Иванов Дмитрий 1996-12-11
6 Иванов Алексей 1993-08-05
4 Иванова Светлана 1993-08-06
7 Процук Алена 1997-02-28
3 Шевченко Тимур 1998-04-27

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

Теперь таблица отсортирована сразу по двум поля, сперва по фамилии, а уже затем по имени:

Сортировка по фамилии и имени
id last_name first_name birthday
6 Иванов Алексей 1993-08-05
1 Иванов Дмитрий 1996-12-11
4 Иванова Светлана 1993-08-06
7 Процук Алена 1997-02-28
3 Шевченко Тимур 1998-04-27

Разумеется, сортировать можно не только по текстовым полям. Например, можно написать ORDER BY birthday:

И получить данные упорядоченные по дате рождения в хронологическом порядке:

Сортировка по дате рождения
id last_name first_name birthday
6 Иванов Алексей 1993-08-05
4 Иванова Светлана 1993-08-06
1 Иванов Дмитрий 1996-12-11
7 Процук Алена 1997-02-28
3 Шевченко Тимур 1998-04-27

А если в конструкции ORDER BY после имени столца написать DESC, то данные будут отсортированы в обратном порядке — свежие даты выше:

Сортировка по дате рождения в обратном порядке
id last_name first_name birthday
3 Шевченко Тимур 1998-04-27
7 Процук Алена 1997-02-28
1 Иванов Дмитрий 1996-12-11
4 Иванова Светлана 1993-08-06
6 Иванов Алексей 1993-08-05

Более того при сортировке данных по нескольким столцам, мы можем для разных столцов указывать разные направления сортировки. Например ORDER BY last_name, birthday DESC:

Тогда данные будут сперва отсортированы в алфавитном порядке по фамилии, а уже внутри каждой фамилии по дате рождения в обратном порядке:

Сортировка по дате рождения в обратном порядке
id last_name first_name birthday
6 Иванов Алексей 1993-08-05
1 Иванов Дмитрий 1996-12-11
4 Иванова Светлана 1993-08-06
7 Процук Алена 1997-02-28
3 Шевченко Тимур 1998-04-27

Следующий урок

Урок 5. Ограничение выборки

В этом уроке вы научитесь ограничивать итоговые результаты с помощью конструкции LIMIT.

Тарифы

Базовый

Самостоятельное обучение по в любой момент

55 видео- уроков

Более 7 часов видео

Дополнительные материалы

Схемы, методички, исходные коды

Возможность скачать видео

Смотреть уроки можно даже без интернета

Доступ к курсу навсегда

Можете освежить знания через год или два

271 практическое задание

Практические занятия на тренажере

Поддержка преподавателя

Помощь в решении заданий в течение 24 часов

Сертификат о прохождении курса

Подтверждение ваших навыков

Эталонные решения

Доступ к видео-урокам + тестовый Премиум доступ к 7 урокам, 26 заданиям и поддержке преподавателя

Премиум

Теория, практика и поддержка —
залог успешного обучения

55 видео- уроков

Более 7 часов видео

Дополнительные материалы

Схемы, методички, исходные коды

Возможность скачать видео

Смотреть уроки можно даже без интернета

Доступ к курсу навсегда

Условия бесплатного тарифа могут измениться

271 практическое задание

Практические занятия на тренажере

Поддержка преподавателя

Помощь в решении заданий в течение 24 часов

Сертификат о прохождении курса

Подтверждение ваших навыков

Эталонные решения

Бесплатный тестовый Премиум доступ к 7 урокам, 26 заданиям и поддержке преподавателя

Источник

Сортировка в MySQL

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

Синтаксис оператора ORDER BY:

Направление сортировки

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

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

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

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

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

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

Или убрать в конец ненужные записи:

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

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

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

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

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

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

Проблема возникает если даты хранятся в текстовом виде (например 23.09.2020). Если отсортировать таблицу по такому полю, то результате будут перепутаны месяцы.

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

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

Источник

Я хочу отсортировать следующие элементы данных в порядке, в котором они представлены ниже (номера 1-12):

любые трюки, чтобы сделать его сортировку более правильно?

кроме того, в интересах полного раскрытия, это может быть сочетание букв и цифр (хотя сейчас это не), Т. Е.:

обновление: люди просят запрос

12 ответов

люди используют различные уловки, чтобы сделать это. Я погуглил и узнал некоторые результаты, каждый из которых следует различным трюкам. Взгляните на них:—10—>

Я только что добавил код каждой ссылки для будущих посетителей.

ввод

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

запрос

дали ввод

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

запрос

ввод

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

запрос

надеюсь, что это помогает

Я знаю, что этот пост закрыт, но я думаю, что мой метод может помочь некоторым людям. Вот оно:

мой набор данных очень похож, но немного сложнее. Он имеет номера, буквенно-цифровые данные:

поэтому я делаю так :

результат должен быть что-то :

вся идея делает некоторую простую проверку в SELECT и сортировка с результатом.

просто сделать это:

добавление +0 будет означать, что:

0, Десять, Одиннадцать, Два, Три, 4

0, Два, Три, Четыре, Десять, 11

Я ненавижу это, но этой совместимость

У меня были хорошие результаты с

этот тип вопроса был задан ранее.

тип сортировки, о котором вы говорите называется «естественная сортировка». Данные, по которым требуется выполнить сортировку, являются буквенно-цифровыми. Было бы лучше создать новый столбец для сортировки.

это должно сортировать буквенно-цифровое поле, как: Только 1/ число, order by 1,2,3,4,5,6,7,8,9,10,11 etc. 2/ Затем поле с текстом типа: 1foo, 2bar, aaa11aa, aaa22aa, b5452 etc.

проверка запроса, если данные являются числом, если не поставить его в 9999999999, то заказать сначала на этот столбец, а затем заказать на данные с текстом

выбрать С. идентификатор, С. наименование, длина(С. имя) Лена, в ASCII(С. имя) ASCCCI Из table_name s Заказ по ASCCCI, len, имя ASC;

вместо того, чтобы пытаться написать какую-то функцию и замедляют SELECT query, я подумал о другом способе сделать это.

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

String nsFieldVal = new NaturalSortString(getFieldValue(), 4).toString()

String sortString = new NaturalSortString(getString(), 4).toString()

для полноты картины, ниже StringUtils.padLeft способ:

результат должен получиться следующим образом

Если вам нужно отсортировать Альфа-числовой столбец, который не имеет никакого стандартного формата вообще

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

для заказа ASC он будет сортировать отлично, для заказа DESC не подходит.

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

Источник

SQL-Урок 3. Сортировка (ORDER BY)

В будущем нам может понадобиться сортировать нашу выборку — в алфавитном порядке для текста или по возрастанию/убыванию — для цифровых значений. Для таких целей в SQL есть специальный оператор ORDER BY .

1. Сортировка выбранных данных.

Давайте всю нашу таблицу посортируем по сумме реализации продукции, а именно по столбцу Amount.

SELECT * FROM Sumproduct ORDER BY Amount

Видим, что запрос посортировал записи по возрастанию в поле Amount. Обязательно нужно соблюдать последовательность расположения операторов, т.е. оператор ORDER BY должен идти в самом конце запроса. В противном случае будет получено сообщение об ошибке.

Также особенностью оператора ORDER BY является то, что он может сортировать данные по полю, которого мы не выбирали в запросе, то есть достаточно, чтобы оно вообще было в БД.

2. Сортировка по нескольким полям.

Теперь посортируем наш пример дополнительно за еще одним полем. Пусть это будет поле City, которое отображает место реализации продукции.

SELECT * FROM Sumproduct ORDER BY Amount, City

3. Направление сортировки.

Несмотря на то, что по умолчанию оператор ORDER BY сортирует по возрастанию, мы можем также прописать сортировки значений по убыванию. Для этого в конце каждого поля проставляем оператор DESC (что является сокращением от слова DESCENDING).

SELECT * FROM Sumproduct ORDER BY Amount DESC, City

В данном примере, значение в поле Amount были посортированы по убыванию, а в поле City — по возрастанию. Оператор DESC применяется только для одного столбца, поэтому при необходимости его нужно прописывать после каждого поля, которое принимает участие в сортировке.

Источник

Читайте также:  бутик отель дача рахманинов официальный сайт
Познавательно-развлекательный портал