HTML Diff
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>&lt;названия_колонок&gt; - список столбцов, которые мы хотим выбрать</li>
6 <ul><li>&lt;названия_колонок&gt; - список столбцов, которые мы хотим выбрать</li>
7 <li>&lt;таблица&gt; - название таблицы, из которой мы выбираем данные</li>
7 <li>&lt;таблица&gt; - название таблицы, из которой мы выбираем данные</li>
8 <li>&lt;название_колонки1&gt;, &lt;название_колонки2&gt;, ... - столбцы, по которым мы хотим отсортировать данные</li>
8 <li>&lt;название_колонки1&gt;, &lt;название_колонки2&gt;, ... - столбцы, по которым мы хотим отсортировать данные</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>