Это потому, что рассчитанный month
упорядочен в алфавитном порядке. Но вы можете оставить это ORDER BY month
и просто изменить его на формат с ведущим 0 в течение месяцев <10. <br>
Таким образом, строковые значения будут иметь одинаковую длину, и сортировка по алфавиту будет правильной.
Потому что при сравнении строк тогда '10' <'9', но '09' <'10' </p>
Для этого просто измените %c
на %m
. Reference
Кроме того, COUNT
можно упростить.
SELECT DATE_FORMAT(sys_date, '%Y-%m') as month, COUNT(*) as Total
FROM sale
GROUP BY month
ORDER BY month
Если вы хотите использовать формат "% Y-% c"?
Тогда вы можете указать год и длину месяца в ORDER BY.
SELECT DATE_FORMAT(sys_date, '%Y-%c') as month, COUNT(*) as Total
FROM sale
GROUP BY YEAR(sys_date), month
ORDER BY YEAR(sys_date), LENGTH(month), month