Как в SQL сделать сортировку по алфавиту исключая лишние слова?
Из-за того, что в начале присутствует ‘ул’ обычная сортировка по алфавиту ORDER BY name ASC не работает.
Как решить проблему?
- Вопрос задан более трёх лет назад
- 2967 просмотров
Комментировать
Решения вопроса 0
Ответы на вопрос 4
Boris Köln @BorisKorobkov Куратор тега MySQL
Web developer
Если нужно сортировать так, чтобы «улица Белова» и «проезд Белова» были рядом, то.
вариант 1: называть их «Белова улица» и «Белова проезд».
вариант 2: хранить в отдельных полях «улица»+»Белова» и «проезд»+»Белова». И сортировать по второму
Ответ написан более трёх лет назад
Комментировать
Нравится 4 Комментировать
Учусь программировать
Странно, что не работает, ведь сортировка в алфавитном порядке подразумевает сортировку по 4 символу, если первые три одинаковые.
Ответ написан более трёх лет назад
Нравится 2 5 комментариев

SELECT * FROM `Address` ORDER BY name ASC
Я так понимаю, что у автора не только улицы, но еще и проспекты, и переулки с бульварами. А хранить в правильной форме «Белова ул», «Новаторов пр» он почему-то не хочет

Антон Антон: Об этом не было упомянуто. Тогда можно предложить вытащить массив адресов, затем разделить по пробелу, собрать новый массив и его отсортировать. ИЛИ
Написать скрипт, который единожды сделает выборку существующих адресов переставит улицы и проспекты с названиями местами и запишет заново. а далее уже записывать как предложил Антон
eldar_web @eldar_web Автор вопроса
Евгений: Ну скажу так, вместо «ул» может быть «г» или «пр» как писали выше, так вот, хотелось бы их вырезать и использовать. В конце оставить эти вещи не то, так как адреса берутся из ФИАС.

eldar_web: Комментарий чуть выше

Приведите к общему виду формат улицы.
Чтобы было ул. Академика и не было «ул Академика», «Ул. Академика» и тп. В pgsql для этого можно создать отдельные функции, используя целую кучу встроенных функций для работы с текстом. Как сделать это в mysql я не знаю, но я бы это для себя очень быстро реализовал бы на питоне с использованием форматирования и регулярок. После этого можно сортировать. Если там не только улицы, разделяете адрес на два поля. 1 поле — тип (улица, шоссе, переулок и тд), 2 поле — название (Академика Янгеля, Электродная, Парковый). Таким образом вы сможете как угодно сортировать эту таблицу.
Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать

Здесь отвечаю на вопросы.
Из-за того, что в начале присутствует ‘ул’ обычная сортировка по алфавиту ORDER BY name ASC не работает.Как решить проблему?
В лоб: удаляйте из названия «исключая лишние слова» и сортируйте. Или добавьте, или вычисляйте специальное поле для сортировки.
MySQL запрос сортировки по алфавиту сперва буквы, а потом цифры
Как видите по умолчанию база данных возвращает данные которые начинаются с числа, а мне нужно что бы сперва были данные начинающиеся с букв. Помогите или подскажите как до ума довести данный запрос.
"2001: A Space Odyssey" "2001: A Space Odyssey" "2001: A Space Odyssey" "2001: A Space Odyssey" "Breaking Bad" "Butch Cassidy and the Sundance Kid" "Butch Cassidy and the Sundance Kid" "Butch Cassidy and the Sundance Kid" "Butch Cassidy and the Sundance Kid" "Casablanca" "Casablanca" "Casablanca" "Casablanca" "Charade" "Charade" "Charade" "Charade" "Cool Hand Luke" "Cool Hand Luke" "Cool Hand Luke" "Cool Hand Luke" "dfg" "dfgdg" "dfsgreg" "Get Shorty " "Get Shorty " "Get Shorty " "Get Shorty "
Еще рассматриваю вариант отсортировать этот массив данных средствами php, но хочется узнать можно ли решить данную задачу исключительно используя SQL.
Сортировка данных в SQL командой ORDER BY
Резюме: В этой статье наглядно показано, как применять предложение ORDER BY для сортировки данных с помощью указания заданного порядка (возрастающего или убывающего).
Введение
Операнд SQL ORDER BY не является обязательным условием команды SELECT . Он дает возможность сортировать строки, получаемые из SELECT совместно с одним или несколькими критериям сортировки заданного порядка.
Далее отображен стандартный синтаксис условия ORDER BY :

В этом синтаксисе:
- Вначале разместите условие ORDER BY после FROM . База данных расценит команду SELECT с опцией сортировки в следующем порядке: FROM > SELECT > ORDER BY .
- Затем укажите порядок сортировки после ORDER BY .
- После чего примените опцию ASC , чтобы набор результатов данных отображался в порядке возрастания или DESC для того, чтобы результирующий набор данных был отсортирован в порядке убывания (от большего к меньшему).
Следует обратить внимание на то, что в SQL по умолчанию в ORDER BY (если вы не указали ни ASC , ни DESC ) используется опция ASC .
ORDER BY также дает возможность отсортировать результаты итоговой выборки не только по одному, но и по нескольким выражениям. В таком случае нужно перечислить все колонки (каждый со своей опцией сортировки ASC или DESC ) через запятую:

В этом примере вначале данные отсортируются по выражению sort_expression_1 , а в рамках одинаковых значений sort_expression_1 по выражению sort_expression_2 .
Следует учесть, что в SQL если не указывать условие ORDER BY , то команда SELECT не станет сортировать набор результатов, либо отсортирует их по ключевому полю (Primary Key).
Примеры использования ORDER BY
Для наглядной демонстрации будем использовать таблицу employees.

1) Рассмотрим сортировку значений в одном столбце на примере ORDER BY
В примере ниже команда SELECT выбирает данные из столбцов «id сотрудника», «имя», «фамилия», «дата приема на работу» и «зарплата» таблицы employees: select * from employees , или так как на картинке ниже


Как видно из вывода, строки не упорядочены.
Далее ORDER BY применяется чтобы отсортировать сотрудников по фамилии в алфавитном порядке:


ORDER BY сортирует строки по значениям в столбце first_name .

2) Сортировка значений в нескольких столбцах на примере ORDER BY
Попробуем отсортировать сотрудников по имени и фамилии в порядке возрастания и по фамилии в порядке убывания:


В этом примере набор результатов выстраивается по фамилии в порядке возрастания, после чего реализуется выстраивание данных по фамилии в порядке убывания.
Обратите внимание на изменение положения двух сотрудников: Alexander Khoo и Alexander Hunold в наборе результатов.
3) Сортировка значений в числовом столбце с помощью ORDER BY
Данный способ реализации применяет условие ORDER BY , чтобы выстроить сотрудников с учетом их заработной платы (от большой к маленькой):


4) Использование SQL ORDER BY для сортировки по датам пример
Помимо символьных и числовых данных, вы можете использовать предложение ORDER BY для сортировки строк по дате. Например, в следующем операторе используется предложение ORDER BY для сортировки сотрудников по значениям в столбце hire_date :


Чтобы увидеть сотрудников, которые пришли в компанию от последнего к самому раннему, вы сортируете сотрудников по датам приема на работу в порядке убывания:


Сводка
Используйте предложение ORDER BY для сортировки строк, возвращаемых предложением SELECT . Применимо как к MySQL? так и к другим вариациям.
Используйте параметр ASC для сортировки строк по возрастанию и DESC для сортировки строк по убыванию.
Как сортировать по алфавиту sql
Ранее в запросах, которые мы с вами приводили, результирующие выборки, получались, в произвольном порядке. Что если нужно вывести скажем, список, учеников школы в алфавитном порядке или стоимость товаров по убыванию? Для этого в операторе SELECT предусмотрено предложение ORDER BY. Вот его синтаксис:
------- ORDER BY -- имя столбца ---------------- -------------------------------- . -- порядковый номер столбца --- -------- ASC ---------- -------- DESC ---------- ------------------------- , -----------------------------------
Для начала, давайте проделаем следующий пример: Показать фактические объемы продаж для каждого офиса, отсортированные в алфавитном порядке по названиям, регионов и в каждом регионе — по названию городов.
SQL> SELECT CITY, REGION, SALES 2 FROM OFFICES 3 ORDER BY REGION, CITY 4 / CITY REGION SALES ------------------------------ ------------------------------ --------- Бубурино Восток 367,911 Красный Мотоцикл Восток 692,637 Чугуевск Восток 735,044 Запиндрищинск Запад 186,042 Котрогайка Запад 835,915
Столбец идущий сразу за предложением ORDER BY является ГЛАВНЫМ ключом, столбцы следующие за ним, являются ВТОРОСТЕПЕННЫМИ ключами. Сортировать записи можно как по возрастанию, так и по убыванию.
Например, в следующем выражении: Вывести список офисов, отсортированный по фактическим объемам продаж в порядке убывания.
SQL> SELECT CITY, REGION, SALES 2 FROM OFFICES 3 ORDER BY SALES DESC 4 / CITY REGION SALES ------------------------------ ------------------------------ --------- Котрогайка Запад 835,915 Чугуевск Восток 735,044 Красный Мотоцикл Восток 692,637 Бубурино Восток 367,911 Запиндрищинск Запад 186,042
Получаем отсортированные объемы продаж по убыванию, с применением предиката DESC, для сортировки по возрастанию, применяется ASC, вследствие того, что данный тип сортировки применяется по умолчанию, его можно не указывать. Так же, если столбец сортировки вычисляемый и не имеет имени, в выражении ORDER BY можно просто указать его порядковый номер!
Например, вот так: Вывести список офисов, отсортированный по разности между фактическим и плановым объемам продаж в порядке убывания.
SQL> SELECT CITY, REGION, (SALES - TARGET) 2 FROM OFFICES 3 ORDER BY 3 DESC 4 / CITY REGION (SALES-TARGET) ------------------------------ ------------------------------ -------------- Красный Мотоцикл Восток 117,637 Котрогайка Запад 110,915 Бубурино Восток 17,911 Чугуевск Восток -64,956 Запиндрищинск Запад -113,958
Так же применяя в выражении ORDER BY имена столбцов, номера столбцов, а так же выражения DESC, ASC, возможно строить достаточно сложные условия сортировки.
Например: Вывести список офисов, отсортированный в алфавитном порядке по названиям регионов, а в каждом регионе по — разности между фактическим и плановым объемам продаж в порядке убывания.
SQL> SELECT CITY, REGION, (SALES - TARGET) 2 FROM OFFICES 3 ORDER BY REGION ASC, 3 DESC 4 / CITY REGION (SALES-TARGET) ------------------------------ ------------------------------ -------------- Красный Мотоцикл Восток 117,637 Бубурино Восток 17,911 Чугуевск Восток -64,956 Котрогайка Запад 110,915 Запиндрищинск Запад -113,958
Таким образом, вам будет легко, задать необходимый порядок сортировки вашего запроса и не будет вызывать особенных трудностей! Пробуйте!
