Задача
Вы хотите выполнить сортировку по дню недели.
Решение
Используйте функцию DAYOFWEEK() для преобразования столбца даты в соответствующее числовое значение дня недели.
Обсуждение
Сортировка по дню недели аналогична сортировке по календарному дню, с той лишь разницей, что для вывода упорядоченных значений используется другая функция.
Вы можете получить день недели, применяя DAYNAME(), но тогда на выходе будут строки, упорядоченные в лексическом порядке, а не как дни недели(воскресенье, понедельник, вторник и т. д.). Тут нам пригодится методика вывода одного значения, а упорядочивания по другому. Будем выводить названия дней при помощи функции DAYNAME(), а сортировать их в порядке дней недели будем посредством функции DAYOFWEEK(), которая возвращает числовые значения от 1 до 7 для дней с воскресенья по субботу:
mysql> SELECT DAYNAME(date) AS day, date, description
-> FROM event
-> ORDER BY DAYOFWEEK(date);
+----------+------------+-------------------------------------+
| day | date | description |
+------------+--------------+----------------------------------------+
| Sunday | 1776-07-14 | Bastille Day |
| Sunday | 1809-02-12 | Abraham Lincoln's birthday |
| Monday | 1215-06-15 | Signing of the Magna Carta |
| Tuesday | 1944-06-06 | D-Day at Normandy Beaches |
| Thursday | 1989-11-09 | Opening of the Berlin Wall |
| Friday | 1957-10-04 | Sputnik launch date |
| Friday | 1958-01-31 | Explorer 1 launch date |
| Friday | 1732-02-22 | George Washington's birthday |
| Saturday | 1789-07-04 | US Independence Day |
| Saturday | 1919-06-28 | Signing of the Treaty of Versailles |
+-----------+---------------+----------------------------------------+
Если вы хотите выполнить сортировку по дню недели, но так, чтобы первым днем недели считался понедельник, используйте функцию MOD() для сопоставления понедельнику значения 0, вторнику – 1, ..., воскресенью – 6:
mysql> SELECT DAYNAME(date), date, description
-> FROM event
-> ORDER BY MOD(DAYOFWEEK(date) + 5, 7);
+--------------------+--------------+----------------------------------------+
| DAYNAME(date) | date | description |
+-------------------+---------------+-----------------------------------------+
| Monday | 1215-06-15 | Signing of the Magna Carta |
| Tuesday | 1944-06-06 | D-Day at Normandy Beaches |
| Thursday | 1989-11-09 | Opening of the Berlin Wall |
| Friday | 1957-10-04 | Sputnik launch date |
| Friday | 1958-01-31 | Explorer 1 launch date |
| Friday | 1732-02-22 | George Washington's birthday |
| Saturday | 1789-07-04 | US Independence Day |
| Saturday | 1919-06-28 | Signing of the Treaty of Versailles |
| Sunday | 1776-07-14 | Bastille Day |
| Sunday | 1809-02-12 | Abraham Lincoln's birthday |
+--------------------+--------------+-----------------------------------------+
Любой день недели можно сделать первым в упорядоченном списке.
Для сортировки по дню недели можно использовать и функцию WEEKDAY(), помня, что она возвращает другой набор значений (0 для понедельника, …, 6 – для воскресенья).