Как провести сортировку данных по двум критериям?

Как правильно выполнить сортировку по двум полям в запросе SELECT * FROM table, чтобы lesson_number на одной дате шли по возрастанию?
Изображение к вопросу
  • 8 января 2024 г. 2:17
Ответы на вопрос 2
Чтобы отсортировать данные по двум критериям в SQL, вы можете использовать ключевое слово `ORDER BY` с указанием сначала поля, по которому требуется первичная сортировка, а затем поля для вторичной сортировки. В вашем случае, если вы хотите сначала сортировать данные по дате (`date_field`, предположим), а затем по номеру урока (`lesson_number`), запрос может выглядеть к примеру так:

```sql
SELECT * FROM table ORDER BY date_field ASC, lesson_number ASC;
```

Такое написание `ORDER BY` сначала отсортирует все строки по полю `date_field` по возрастанию (ASC означает "по возрастанию"), а затем в рамках каждой даты строки будут снова отсортированы, на этот раз по полю `lesson_number` также по возрастанию.

Если же `date_field` это действительно дата, и у вас нет отдельного столбца для времени, то это будет работать, как предполагается. Если, однако, `date_field` включает и время, возможно, вам потребуется отделить дату от времени, используя функции вашей СУБД, как `DATE()` в MySQL, чтобы выполнить сортировку именно по датам.

Для MySQL запрос будет выглядеть следующим образом:

```sql
SELECT * FROM table ORDER BY DATE(date_field) ASC, lesson_number ASC;
```

Если же `date_field` включает время и вы используете другую СУБД (например, PostgreSQL), то вам может понадобиться иное решение, чтобы извлечь дату из поля даты/времени. 

Учтите, что при использовании `ORDER BY` сортировка по `ASC` является поведением по умолчанию, и вы можете опустить его, если хотите сортировать именно по возрастанию. Если вы хотите сортировать в обратном порядке, используйте ключевое слово `DESC` (по убыванию).
Думаю, что lesson_number  у тебя текстовое поле, если поменяешь на целое число,  то заработает как надо :) 

Ну или можешь в запросе привести тип к числу. Почитай вот это https://stackoverflow.com/questions/7792738/numeri...
Похожие вопросы