Урок 4. Сортировка в SQL (ORDER BY)
В SQL часто кроме фильтрации данных, также часто требуется отсортировать их по одному из столцов.
В первом уроке мы написали SQL-запрос для получения данных о совершенолетних пользователях. Посмотрим на него еще раз:
SELECT last_name, first_name, birthday FROM users WHERE age >= 18
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
SELECT last_name, first_name, birthday FROM users WHERE age >= 18 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:
SELECT last_name, first_name, birthday FROM users WHERE age >= 18 ORDER BY last_name, 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:
SELECT last_name, first_name, birthday FROM users WHERE age >= 18 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:
SELECT last_name, first_name, birthday FROM users WHERE age >= 18 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 часов
Сертификат о прохождении курса
Подтверждение ваших навыков
Эталонные решения
Решения преподавателя
55 видео-уроков
Более 7 часов видео
Дополнительные материалы
Схемы, методички, исходные коды
Возможность скачать видео
Смотреть уроки можно даже без интернета
Доступ к курсу навсегда
Условия бесплатного тарифа могут измениться
271 практическое задание
Практические занятия на тренажере
Поддержка преподавателя
Помощь в решении заданий в течение 24 часов
Сертификат о прохождении курса
Подтверждение ваших навыков
Эталонные решения
Решения преподавателя
Без воды
Поддержка
Регистрация
Письмо со ссылкой для доступа отправлено.
Проверьте почту.
Письмо не пришло? Посмотрите в спаме.
Регистрируясь, вы соглашаетесь с условиями предоставления услуг (пользовательское соглашение).
DESCRIBE TABLE | ClickHouse Docs
Возвращает описание столбцов таблицы.
Синтаксис
DESC|DESCRIBE TABLE [db.]table [INTO OUTFILE filename] [FORMAT format]
Запрос DESCRIBE
name
— имя столбца;type
— тип столбца;default_type
— вид выражения для значения по умолчанию:DEFAULT
,MATERIALIZED
илиALIAS
. Если значение по умолчанию не задано, то возвращается пустая строка;default_expression
— значение, заданное в секцииDEFAULT
;comment
— комментарий;codec_expression
— кодек, который применяется к столбцу;ttl_expression
— выражение TTL;is_subcolumn
— флаг, который равен1
для внутренних подстолбцов. Он появляется в результате, только если описание подстолбцов разрешено настройкой describe_include_subcolumns.
Каждый столбец Nested структур описывается отдельно. Перед его именем ставится имя родительского столбца с точкой. Чтобы отобразить внутренние подстолбцы других типов данных, нужно включить настройку describe_include_subcolumns.
Пример
Запрос:
CREATE TABLE describe_example (
id UInt64, text String DEFAULT 'unknown' CODEC(ZSTD),
user Tuple (name String, age UInt8)
) ENGINE = MergeTree() ORDER BY id;DESCRIBE TABLE describe_example;
DESCRIBE TABLE describe_example SETTINGS describe_include_subcolumns=1;
Результат:
┌─name─┬─type──────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ id │ UInt64 │ │ │ │ │ │
│ text │ String │ DEFAULT │ 'unknown' │ │ ZSTD(1) │ │
│ user │ Tuple(name String, age UInt8) │ │ │ │ │ │
└──────┴───────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
Второй запрос дополнительно выводит информацию о подстолбцах:
┌─name──────┬─type──────────────────────────┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┬─is_subcolumn─┐
│ id │ UInt64 │ │ │ │ │ │ 0 │
│ text │ String │ DEFAULT │ 'unknown' │ │ ZSTD(1) │ │ 0 │
│ user │ Tuple(name String, age UInt8) │ │ │ │ │ │ 0 │
│ user. name │ String │ │ │ │ │ │ 1 ││ user.age │ UInt8 │ │ │ │ │ │ 1 │
└───────────┴───────────────────────────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┴──────────────┘
См. также
- настройка describe_include_subcolumns.
Упорядочение по ASC / DESC — с 5 примерами
Введение: Упорядочивание по ASC / DESC в SqlВ операторе SELECT порядок строк в результате не гарантируется. Это означает, что SQL Server возвращает набор результатов с неопределенным порядком строк или, можно сказать, сортировкой строк. Чтобы отсортировать данные в определенном порядке, вы можете использовать ORDER BY ASC/DESC в SQL.
Зачем нужно использовать ORDER BY в SQL?
Когда вы выполняете SQL-запрос с определенным результатом, иногда вам нужно просмотреть данные в отсортированном порядке, например рейтинг студентов, отсортировать стоимость гостиничного номера по самой высокой или самой низкой стоимости и т.
д. Затем вы можете использовать ключевое слово Order by ASC / Desc для сортировки данных в определенном порядке.Что такое заказ от ASC?
ASC = По возрастанию , что означает сортировку результата/данных с определенным столбцом от наименьшего значения к наибольшему значению (например, 1, 2, 3, 4, 5, 6, 7, 8 и т. д.)
Что такое заказ по DESC?
DESC = По убыванию значение, сортировать результат/данные с определенным столбцом от наибольшего значения к наименьшему (например, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10). , 9 …..и так далее)
Синтаксис:
ВЫБЕРИТЕ select_list ИЗ имя_таблицыORDER BY ASC|DESC
используйте ASC или DESC, чтобы указать, должны ли значения в указанном столбце сортироваться по возрастанию или по убыванию
ASC сортирует результат от наименьшего значения к наибольшему значению сортирует набор результатов от наибольшего значения к наименьшему
Примечание. SQL Server использует ASC в качестве порядка сортировки по умолчанию
Пример #1: Сортировка по ASC, сортировка одного столбца в порядке возрастанияПримечание. Порядок ASC по умолчанию
Если вы не используете какой-либо указанный порядок, будет отображаться порядок по умолчанию, то есть в порядке возрастания. этот порядок по умолчанию применим для любого общего запроса.
, как показано ниже, вывод покажет результат для имени клиента в порядке возрастания
SELECT Имя Клиента ИЗ [dbo].[Customers_Tbl] ЗАКАЗ BY Customer_Name
Результат :
Пример #2: ORDER BY DESC, сортировка столбца по убываниюзаказ.
ВЫБЕРИТЕ Имя Клиента ИЗ [dbo].[Customers_Tbl] ЗАКАЗ ПО Customer_Name DESC
Результат:
Пример #3: Упорядочить / Сортировать несколько столбцов с разным порядкомСуществует способ, при котором вы можете использовать оба порядка ASC | DESC, если вы используете для сортировки записей на основе двух столбцов, иногда нам нужно отображать данные в порядке первого столбца, а затем по второму столбцу.
вы можете сделать это, используя приведенный ниже пример. В этом SQL-запросе выполняется Customer_Name и Product_Category для выполнения сортировки DESC и ASC соответственно
ВЫБОР Customer_Name, Product_Category ИЗ [dbo].[Customers_Tbl] ЗАКАЗАТЬ Customer_Name DESC , Product_Category ASC
Результат :
Пример #4: Сортировка столбца на основе функциивы можете применить опцию ASC/DESC в любой функции в, например Len(), Left query Right() и т. д.…
Как показано ниже, пример пытается отсортировать столбец «Customer_Name» на основе имени с помощью функции подстроки 9.0007
ВЫБОР Имя Клиента, Категория продукта ИЗ [dbo].[Customers_Tbl] ЗАКАЗАТЬ SUBSTRING (Customer_Name , 1, CHARINDEX(' ', Customer_Name ) - 1) ASCПример 5. Сортировка столбца с использованием предложения WHERE
пункт как условие для Product_Category. Результат покажет отсортированный столбец для Customer_Name для всех Product_Category равно «Мебель».
ВЫБЕРИТЕ Имя Клиента, Категория продукта ОТ [dbo].[Customers_Tbl] ГДЕ Product_Category = 'Мебель' ЗАКАЗ ПО Customer_Name ASC
SQL — ORDER BY
Последнее изменение: 09 августа 2021 г.
По умолчанию результаты возвращаются в том порядке, в котором они хранятся в базе данных. Но иногда вы захотите отсортировать их по-другому. Вы можете сделать это с помощью команды «ORDER BY» в конце ваших запросов, как показано в расширенной версии нашего шаблона SQL здесь
.SELECT [материал, который вы хотите выбрать] FROM [таблица, в которой он находится] ORDER BY [столбец, по которому вы хотите упорядочить];
Например, следующий запрос показывает все треки, упорядоченные по альбомному_идентификатору .