0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>Сортировка данных - это важный инструмент для анализа данных. Она позволяет указывать, в каком порядке нужно выводить результаты запроса. Таким образом мы можем с легкостью найти наибольшие или наименьшие значения в столбце - продукт с самой высокой ценой или магазин с наибольшим количеством продаж. Так мы выделяем наиболее значимые данные и сосредотачиваемся на их анализе.</p>
1
<p>Сортировка данных - это важный инструмент для анализа данных. Она позволяет указывать, в каком порядке нужно выводить результаты запроса. Таким образом мы можем с легкостью найти наибольшие или наименьшие значения в столбце - продукт с самой высокой ценой или магазин с наибольшим количеством продаж. Так мы выделяем наиболее значимые данные и сосредотачиваемся на их анализе.</p>
2
<p>В этом уроке мы обсудим, как сортировать данные с помощью оператора ORDER BY.</p>
2
<p>В этом уроке мы обсудим, как сортировать данные с помощью оператора ORDER BY.</p>
3
<h2>Базовый синтаксис</h2>
3
<h2>Базовый синтаксис</h2>
4
<p>Синтаксис сортировки данных в SQL с использованием оператора ORDER BY выглядит так:</p>
4
<p>Синтаксис сортировки данных в SQL с использованием оператора ORDER BY выглядит так:</p>
5
<p>Рассмотрим его подробнее:</p>
5
<p>Рассмотрим его подробнее:</p>
6
<ul><li><названия_колонок> - список столбцов, которые мы хотим выбрать</li>
6
<ul><li><названия_колонок> - список столбцов, которые мы хотим выбрать</li>
7
<li><таблица> - название таблицы, из которой мы выбираем данные</li>
7
<li><таблица> - название таблицы, из которой мы выбираем данные</li>
8
<li><название_колонки1>, <название_колонки2>, ... - столбцы, по которым мы хотим отсортировать данные</li>
8
<li><название_колонки1>, <название_колонки2>, ... - столбцы, по которым мы хотим отсортировать данные</li>
9
<li>[ASC|DESC] - необязательная опция, которая указывает направление сортировки</li>
9
<li>[ASC|DESC] - необязательная опция, которая указывает направление сортировки</li>
10
</ul><p>Обсудим последнюю опцию. С ее помощью мы задаем направление сортировки, используя ключевые слова:</p>
10
</ul><p>Обсудим последнюю опцию. С ее помощью мы задаем направление сортировки, используя ключевые слова:</p>
11
<ul><li>ASC - сортировка по возрастанию (от меньшего к большему, от более ранних дат к более поздним)</li>
11
<ul><li>ASC - сортировка по возрастанию (от меньшего к большему, от более ранних дат к более поздним)</li>
12
<li>DESC- сортировка в обратную сторону, то есть по убыванию</li>
12
<li>DESC- сортировка в обратную сторону, то есть по убыванию</li>
13
</ul><p>Когда мы используем оператор ORDER BY без указания направления сортировки, по умолчанию используется ASC.</p>
13
</ul><p>Когда мы используем оператор ORDER BY без указания направления сортировки, по умолчанию используется ASC.</p>
14
<p>Возьмем нашу<a>базу продаж</a>и отсортируем список продуктов по убыванию цены:</p>
14
<p>Возьмем нашу<a>базу продаж</a>и отсортируем список продуктов по убыванию цены:</p>
15
<p>В этом примере мы выбираем столбцы product_name и price из таблицы products, а затем сортируем результаты по столбцу price в порядке убывания. Таким образом, мы получим список продуктов от дорогих к дешевым:</p>
15
<p>В этом примере мы выбираем столбцы product_name и price из таблицы products, а затем сортируем результаты по столбцу price в порядке убывания. Таким образом, мы получим список продуктов от дорогих к дешевым:</p>
16
<p>Также мы можем сортировать данные по нескольким столбцам. Например, отсортируем таблицу продаж по дате и количеству продаж:</p>
16
<p>Также мы можем сортировать данные по нескольким столбцам. Например, отсортируем таблицу продаж по дате и количеству продаж:</p>
17
<p>В этом примере мы выбираем столбцы sale_date и quantity из таблицы sales. Затем мы сортируем результаты сначала по столбцу sale_date в порядке возрастания, а затем - по столбцу quantity в порядке убывания. В итоге получаем список продаж, отсортированных сначала по дате, а затем - по количеству продаж:</p>
17
<p>В этом примере мы выбираем столбцы sale_date и quantity из таблицы sales. Затем мы сортируем результаты сначала по столбцу sale_date в порядке возрастания, а затем - по столбцу quantity в порядке убывания. В итоге получаем список продаж, отсортированных сначала по дате, а затем - по количеству продаж:</p>
18
<p>Мы можем указывать не только имена столбцов в операторе ORDER BY, но еще и использовать порядок сортировки столбцов. Это делается с помощью выражения ORDER BY 1, 2, ..., n, где числа соответствуют позиции столбцов в выборке.</p>
18
<p>Мы можем указывать не только имена столбцов в операторе ORDER BY, но еще и использовать порядок сортировки столбцов. Это делается с помощью выражения ORDER BY 1, 2, ..., n, где числа соответствуют позиции столбцов в выборке.</p>
19
<p>Это удобно, когда мы работаем с большими наборами данных и хотим отсортировать результаты по нескольким столбцам. Здесь можно не прописывать имена столбцов, а просто можно перечислить их позиции. Так удобнее и читать запрос, и писать его.</p>
19
<p>Это удобно, когда мы работаем с большими наборами данных и хотим отсортировать результаты по нескольким столбцам. Здесь можно не прописывать имена столбцов, а просто можно перечислить их позиции. Так удобнее и читать запрос, и писать его.</p>
20
<p>Возьмем для примера следующий запрос:</p>
20
<p>Возьмем для примера следующий запрос:</p>
21
<p>В ответ на него мы получим такой результат:</p>
21
<p>В ответ на него мы получим такой результат:</p>
22
<p>Здесь мы указываем позиции двух столбцов:</p>
22
<p>Здесь мы указываем позиции двух столбцов:</p>
23
<ul><li>3 для сортировки по столбцу price</li>
23
<ul><li>3 для сортировки по столбцу price</li>
24
<li>2 для сортировки по столбцу category</li>
24
<li>2 для сортировки по столбцу category</li>
25
</ul><p>Такой подход позволяет нам сократить код и сделать его более лаконичным.</p>
25
</ul><p>Такой подход позволяет нам сократить код и сделать его более лаконичным.</p>
26
<h2>Обработка нулевых значений</h2>
26
<h2>Обработка нулевых значений</h2>
27
<p>При работе с оператором ORDER BY нужно не забывать про NULL-значения - с ними есть несколько тонкостей.</p>
27
<p>При работе с оператором ORDER BY нужно не забывать про NULL-значения - с ними есть несколько тонкостей.</p>
28
<p>В языке SQL нет единого стандарта как сортировать данные с NULL, и каждый провайдер, авторы базы данных, решает сам. Поэтому положение NULL-значений может отличаться в разных БД. Например, в MySQL NULL будут впереди при сортировке по возрастанию, тогда как в PostreSQL в самом конце.</p>
28
<p>В языке SQL нет единого стандарта как сортировать данные с NULL, и каждый провайдер, авторы базы данных, решает сам. Поэтому положение NULL-значений может отличаться в разных БД. Например, в MySQL NULL будут впереди при сортировке по возрастанию, тогда как в PostreSQL в самом конце.</p>
29
<p>Потому, если ваши данные содержат NULL, то важно явно указывать, где должны располагаться значения NULL в результирующем наборе данных. Для этого можно пользоваться двумя расширениями:</p>
29
<p>Потому, если ваши данные содержат NULL, то важно явно указывать, где должны располагаться значения NULL в результирующем наборе данных. Для этого можно пользоваться двумя расширениями:</p>
30
<ul><li>NULLS LAST - оно указывает, что значения NULL должны быть в конце результата. Обычно его используют при сортировке по возрастанию</li>
30
<ul><li>NULLS LAST - оно указывает, что значения NULL должны быть в конце результата. Обычно его используют при сортировке по возрастанию</li>
31
<li>NULLS FIRST - оно указывает, что значения NULL должны быть в начале результата. Его используют в сортировке по убыванию</li>
31
<li>NULLS FIRST - оно указывает, что значения NULL должны быть в начале результата. Его используют в сортировке по убыванию</li>
32
</ul><p>Оба расширения помогают убрать значения NULL, чтобы они не влияли на порядок вывода ненулевых значений.</p>
32
</ul><p>Оба расширения помогают убрать значения NULL, чтобы они не влияли на порядок вывода ненулевых значений.</p>
33
<p>Предположим, у нас есть таблица customers с информацией о клиентах. В ней есть столбцы customer_id, customer_name и age. Создадим новую таблицу с NULL-значениями в столбце age:</p>
33
<p>Предположим, у нас есть таблица customers с информацией о клиентах. В ней есть столбцы customer_id, customer_name и age. Создадим новую таблицу с NULL-значениями в столбце age:</p>
34
<p>Выведем данные с помощью такого запроса:</p>
34
<p>Выведем данные с помощью такого запроса:</p>
35
<p>Новая таблица будет выглядеть так:</p>
35
<p>Новая таблица будет выглядеть так:</p>
36
<p>Теперь попробуем убрать нулевые значения в начало или конец списка.</p>
36
<p>Теперь попробуем убрать нулевые значения в начало или конец списка.</p>
37
<p>Отсортируем по возрастанию с расширением NULLS LAST:</p>
37
<p>Отсортируем по возрастанию с расширением NULLS LAST:</p>
38
<p>Результат будет следующим:</p>
38
<p>Результат будет следующим:</p>
39
<p>Как видим, значения NULL отображаются в конце результата после всех ненулевых значений.</p>
39
<p>Как видим, значения NULL отображаются в конце результата после всех ненулевых значений.</p>
40
<p>Похожим образом работает сортировка по убыванию с расширением NULLS FIRST:</p>
40
<p>Похожим образом работает сортировка по убыванию с расширением NULLS FIRST:</p>
41
<p>Получаем:</p>
41
<p>Получаем:</p>
42
<p>Здесь значения NULL отображаются в начале результата перед всеми ненулевыми значениями.</p>
42
<p>Здесь значения NULL отображаются в начале результата перед всеми ненулевыми значениями.</p>
43
<p>Как видите, расширения NULLS LAST и NULLS FIRST позволяют контролировать положение значений NULL и адаптировать результаты запроса так, чтобы нам было удобно работать с результатами.</p>
43
<p>Как видите, расширения NULLS LAST и NULLS FIRST позволяют контролировать положение значений NULL и адаптировать результаты запроса так, чтобы нам было удобно работать с результатами.</p>
44
<h2>Сортировка с агрегацией</h2>
44
<h2>Сортировка с агрегацией</h2>
45
<p>Кроме того, сортировку данных можно сочетать с агрегатными функциями - COUNT, SUM и AVG. Таким образом, можно найти самые частые или самые редкие повторяющиеся значения в столбце. Например, можно найти самый популярный продукт или клиента с наибольшим количеством заказов.</p>
45
<p>Кроме того, сортировку данных можно сочетать с агрегатными функциями - COUNT, SUM и AVG. Таким образом, можно найти самые частые или самые редкие повторяющиеся значения в столбце. Например, можно найти самый популярный продукт или клиента с наибольшим количеством заказов.</p>
46
<p>Например, отсортируем продукты по количеству продаж:</p>
46
<p>Например, отсортируем продукты по количеству продаж:</p>
47
<p>Получаем таблицу:</p>
47
<p>Получаем таблицу:</p>
48
<p>Разберемся, что происходит в этом коде:</p>
48
<p>Разберемся, что происходит в этом коде:</p>
49
<ol><li>SELECT product_id, SUM(quantity) AS total_sales - выбираем столбец product_id, вычисляем сумму продаж для каждого уникального product_id и задаем псевдоним total_sales для результирующего столбца с суммой продаж</li>
49
<ol><li>SELECT product_id, SUM(quantity) AS total_sales - выбираем столбец product_id, вычисляем сумму продаж для каждого уникального product_id и задаем псевдоним total_sales для результирующего столбца с суммой продаж</li>
50
<li>FROM sales - указываем, что данные берутся из таблицы sales</li>
50
<li>FROM sales - указываем, что данные берутся из таблицы sales</li>
51
<li>GROUP BY product_id - группируем данные по уникальным значениям столбца product_id. Это означает, что в результате мы увидим product_id - отдельную строку для каждого уникального значения</li>
51
<li>GROUP BY product_id - группируем данные по уникальным значениям столбца product_id. Это означает, что в результате мы увидим product_id - отдельную строку для каждого уникального значения</li>
52
<li>ORDER BY total_sales DESC - сортируем результаты по столбцу total_sales в порядке убывания от большего к меньшему</li>
52
<li>ORDER BY total_sales DESC - сортируем результаты по столбцу total_sales в порядке убывания от большего к меньшему</li>
53
</ol><p>Если коротко, этот код возвращает результаты запроса, в которых продукты отображаются в порядке убывания общей суммы продаж. Продукт с наибольшей суммой продаж будет первым в результате, а продукт с наименьшей суммой - в самом конце.</p>
53
</ol><p>Если коротко, этот код возвращает результаты запроса, в которых продукты отображаются в порядке убывания общей суммы продаж. Продукт с наибольшей суммой продаж будет первым в результате, а продукт с наименьшей суммой - в самом конце.</p>
54
<h2>Сортировка с оператором LIMIT</h2>
54
<h2>Сортировка с оператором LIMIT</h2>
55
<p>Кроме того, мы можем отсортировать данные одновременно с ограничением размера выборки. В этом помогает оператор LIMIT. Это полезно, когда мы хотим вывести несколько значений из начала или конца результирующего набора.</p>
55
<p>Кроме того, мы можем отсортировать данные одновременно с ограничением размера выборки. В этом помогает оператор LIMIT. Это полезно, когда мы хотим вывести несколько значений из начала или конца результирующего набора.</p>
56
<p>Для примера выберем из нашей базы пять продуктов с самой высокой ценой:</p>
56
<p>Для примера выберем из нашей базы пять продуктов с самой высокой ценой:</p>
57
<p>Здесь мы сортируем данные по столбцу price в обратном порядке (DESC). Затем мы используем оператор LIMIT и ограничиваем выборку пятью первыми результатами:</p>
57
<p>Здесь мы сортируем данные по столбцу price в обратном порядке (DESC). Затем мы используем оператор LIMIT и ограничиваем выборку пятью первыми результатами:</p>
58
<p>Это очень удобно при работе с большими объемами данных - можно вывести не все соответствующие результаты, а только значимые для анализа.</p>
58
<p>Это очень удобно при работе с большими объемами данных - можно вывести не все соответствующие результаты, а только значимые для анализа.</p>
59
<h2>Выводы</h2>
59
<h2>Выводы</h2>
60
<p>В этом уроке мы изучили сортировку данных. Она помогает структурировать информацию, выделять значимые значения, определять тенденции и принимать обоснованные решения на основе анализа данных. Подведем краткие итоги этого урока:</p>
60
<p>В этом уроке мы изучили сортировку данных. Она помогает структурировать информацию, выделять значимые значения, определять тенденции и принимать обоснованные решения на основе анализа данных. Подведем краткие итоги этого урока:</p>
61
<ul><li>Данные сортируются с помощью оператора ORDER BY, который позволяет управлять порядком вывода результатов запроса</li>
61
<ul><li>Данные сортируются с помощью оператора ORDER BY, который позволяет управлять порядком вывода результатов запроса</li>
62
<li>Синтаксис оператора ORDER BY включает список столбцов, по которым мы хотим отсортировать данные</li>
62
<li>Синтаксис оператора ORDER BY включает список столбцов, по которым мы хотим отсортировать данные</li>
63
<li>По умолчанию сортировка происходит по возрастанию (ASC), но можно и указать сортировку по убыванию (DESC)</li>
63
<li>По умолчанию сортировка происходит по возрастанию (ASC), но можно и указать сортировку по убыванию (DESC)</li>
64
<li>Можно сортировать данные по нескольким столбцам, указывая их имена или позиции в выборке</li>
64
<li>Можно сортировать данные по нескольким столбцам, указывая их имена или позиции в выборке</li>
65
<li>Расширения NULLS LAST и NULLS FIRST помогают указать положение значений NULL в результирующем наборе</li>
65
<li>Расширения NULLS LAST и NULLS FIRST помогают указать положение значений NULL в результирующем наборе</li>
66
<li>С помощью LIMIT можно выводить не все результаты сортировки, а ограниченное их количество - например, первые пять значений</li>
66
<li>С помощью LIMIT можно выводить не все результаты сортировки, а ограниченное их количество - например, первые пять значений</li>
67
</ul>
67
</ul>