Mysql сортировка по нескольким полям. Сортировка данных в SQL (ORDER BY). Сортировка выбранных данных

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

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

2, 4, 1, 5, 9

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

1, 2, 4, 5, 6

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

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

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

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

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

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

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

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

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

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

SELECT * FROM goods ORDER BY title

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

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

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

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

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

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

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

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

SELECT * FROM goods ORDER BY price DESC

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

SELECT * FROM goods ORDER BY price ASC

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

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

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

SELECT * FROM mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

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

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 рублей, упорядочив по названию в алфавитном порядке:

SELECT * FROM goods WHERE price 100 ORDER BY price ASC


Доброго времени суток форумчане.
В процессе проектирования базы данных по производству плановых ремонтов возникла необходимость вычислить максимум из дат нескольких полей т.е. вычислить последний.
в MS Exel это делается легко, а как это можно реализовать в Access? неужели потребуется писать длинный if на сравнение значений между собою больше/меньше как в примере?
Если существует др способ нельзя ли выложить какой либо пример.
Заранее спасибо.

Ответ:

Сообщение от glsn

вычислить максимум из дат нескольких полей

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

Ответ:

еще раз, объясните, что для вас значит subselect? Это:

update table set attr1 = subselect.attr1, attr2 = subselect.attr2 from table INNER JOIN (SELECT oid, attr1, attr2 FROM Table2) AS subselect on table .oid=subselect.oid

???

Вопрос: ORDER BY сортировка по нескольким полям


Создаю форум и требуется отсортировать данные по двум полям: zak и date.
Если zak = 1, то тема вверху и на значение date реагирует.
Если zak = 0, то тема реагирует исключительно на ORDER BY `date` DESC.
P.S. Лопата не бей:)

Ответ: Тогда уж так:
order by zak desc , date desc

Вопрос: Order by по полю со значениями 1,1а,1b,2,2a,3 и так далее..


Добрый день!
Помогите,пожалуйста, новичку:

Есть поле c именем "noname" в таблицe "name" со значениями содержащими цифру и букву -
Запрос select noname from name order by noname ;
Дает такой результат:

"1"
"10"
"10a"
"10c"
"10d"
"11"
"11a"
"11b"
"12"
"13"
"14"
"14b"
"14c"
"14d"
"15"
"16"
"17"
"18"
"19"
"1a"
"1b"
"1c"
"2"
"20"
"20a"
"20b"
"21"
"21a"
"21b"
"21c"
"21d"
"21e"
"22"
"23"
"23b"
"23c"
"24"
"24b"
"25"
"26"
"27"
"27a"
"3"
"30"
"31"
"32"
"3a"
"4"
"40a"
"40b"
"41"
"41b"
"41c"
"42a"
"43"
"43b"
"43c"
"43d"
"44"
"45"
"45a"
"45b"
"45c"
"45d"
"4b"
"4c"
"4d"
"4e"
"5"
"5a"
"6"

Как сделать order by так, чтобы сортировка была сначала по цифре потом по букве, то есть -

1
1a
1b
1c
2
3
3a
4
4b
4c
4d
и так далее..

Ответ: Novichek_nes,
очень похоже на HEX
ORDER BY DECODE (LPAD (noname, 16, "0" ), "HEX" )

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


Подскажите, как лучше провести сортировку по нескольким полям и по возрастаещему / убывающему порядку, в зависимости от условий?

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

Case @sortcolumn1
when "column1" then column1
when "column1" then column2
end
case @sortcolumn2
when "column1" then column1
when "column1" then column2
end

а вот как добавить еще опцию ASX / DESC?

Ответ: В таких случаях эффективнее выполнять сортировку клиентским приложением.


Загрузка с помощью SQL Loader (Sqlldr) из одного в поля файла в несколько полей базы.
Пример задачи:
В файле прописаны поля - field1; field2; field3
Имеется таблица с полями - field1; field2; field3; field4 - где при загрузке данных из нашего файла должно получиться во втором и четвертых полях одинаковые значения - field2 = field4.
Поля имеют различную длину.
Как написать контрольный файл для загрузки данных в таком случае?

Вопрос: подсчеткол-ва записей по нескольким полям


Подскажите, пожалуйста, как сделать подсчет по нескольким полям? Допустим, имеется таблица Автомобиль с полями Год_выпуска и Марка. Нужно сделать параметрический ввод значений и подсчитать, сколько автомобилей указанной марки указанного года выпуска есть в таблице.
Спасибо.

Ответ: экспонат , все каунты делать по коду записи, сочетание полей Марка-год в таблице индексировать

Вопрос: Как получить порядковый номер (но не ID) в запросе с ORDER BY


Добрый день,

Подскажите новичку:

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

CREATE TABLE List ( ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , Name VARCHAR (100), City VARCHAR (100)) CREATE INDEX NameIdx ON List (Name ); CREATE INDEX CityIdx ON List (City);

И в ней много (скажем миллион) записей. Для отображения таблицы используется простая пагинация через OFFSET x LIMIT 500.

Если таблица отсортирована по ID то все понятно - новая запись будет на последней странице. Но что если пользователь перед добавлением записи выбрал сортировку по полю Name ? Как в этом случае понять на какой странице она находится т.е. какое смещение должно быть в OFFSET ? А если выбрана сортировка по двум полям - ORDER BY Name, City - как понять на какой странице должна быть добавленная запись без перебора всего запроса?

Грубо говоря, нужно получить COUNT (*) числа записей, которые находятся ДО вновь добавленной с учетом сортировки по полям.

Спасибо за помощь!

Ответ:
Поле по которому включена сортировка в гриде не имеет значения в новой записи... Ну а в других, более важных полях она записи имеет? Хотя бы ID? Ты вообще можешь найти в базе свежедобавленную запись? Намек: почитай про AUTOINCREMENT

И?
< "jonny" and City > "Moscow"

а для пустого города:
select count (*) from table where Name < "jonny" and City is null И делай себе соответствующие условия больше-меньше или null в зависимости от того какая там у тебя сортировка включена и что в искомой строке задано.

Ну если сильно хочешь, то можешь конечно и перебирать... Пользователи будут ворчать и плеваться, но это их проблемы, правда?


Есть такая задумка, основные информативные данные в таблице
--это ФИО
--и несколько полей с номерами телефонов привязанные к ФИО
--(остальные поля регионы, операторы, и др.информация).

В базе необходимо сделать выборку на поиск определенного номера телефона среди всех ФИО, и вывод всей информации по нему (№ тел., все ФИО где он встречается, регион).

Вопрос: как организовать записи нескольких номеров телефонов для более удобного поиска и вывода информации
--у меня на каждое ФИО 6 полей с номерами телефонов
-- и как сформировать запрос на поиск определенного номера по нескольким полям с номерами телефонов?

Ответ: ваши таблицы не нормализованы

Таб1 связана с таб2 как 1:М
--ид1
--фио
--идгород

Таб2
--ид2
--ид1
--сеть
--подключение
--номер

СПРАВОЧНИК ГОРОДА
--идгород
--наименование
--идРегион

Справочник Регионы
--идРегион
--наименование

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

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

2, 4, 1, 5, 9

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

1, 2, 4, 5, 6

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

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

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

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

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

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

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

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

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

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

SELECT * FROM goods ORDER BY title

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

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

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

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

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

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

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

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

SELECT * FROM goods ORDER BY price DESC

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

SELECT * FROM goods ORDER BY price ASC

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

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

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

SELECT * FROM mytable ORDER BY column1 ASC, column2 DESC, column3 ASC

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

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 рублей, упорядочив по названию в алфавитном порядке:

SELECT * FROM goods WHERE price 100 ORDER BY price ASC

В будущем нам может понадобиться сортировать нашу выборку - в алфавитном порядке для текста или по возрастанию/убыванию - для цифровых значений. Для таких целей в 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

Очередность сортировки будет зависеть от порядка расположения полей в запросе. То есть, в нашем случае сначала данные будут рассортированы по колонке Amount , а затем по City .

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

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

SELECT * FROM Sumproduct ORDER BY Amount DESC , City

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