Сортировать DATE_FORMAT "% Y-% c" в ASC - PullRequest
0 голосов
/ 09 сентября 2018

У меня есть запрос

SELECT DATE_FORMAT(sys_date, '%Y-%c') as month, COUNT(DATE_FORMAT(sys_date, '%Y-%c'))
FROM sale
GROUP BY month
ORDER BY month ASC

возвращает следующий результат,

month   COUNT(DATE_FORMAT(sys_date, '%Y-%c'))
2017-10 204
2017-11 178
2017-12 88
2017-7  3
2017-8  1
2017-9  153
2018-1  91
2018-2  86
2018-3  67
2018-4  109
2018-5  131
2018-6  47
2018-7  50
2018-8  36
2018-9  39

Как мне сделать вывод в правильном порядке возрастания? Как,

month   COUNT(DATE_FORMAT(sys_date, '%Y-%c'))
2017-7  3
2017-8  1
2017-9  153
2017-10 204
2017-11 178
2017-12 88
2018-1  91
2018-2  86
2018-3  67
2018-4  109
2018-5  131
2018-6  47
2018-7  50
2018-8  36
2018-9  39

Я пытался использовать MONTH(month), YEAR(month) ASC и многие другие опции, перечисленные на сайте. Но, похоже, ничего не работает.

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Это потому, что рассчитанный 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
0 голосов
/ 09 сентября 2018

Сортировка данных на основе ГОД и МЕСЯЦ , полученных из sys_date напрямую. Поскольку у вас включен режим only_full_group_by, вам потребуется получить значения YEAR и MONTH в части SELECT, чтобы предложение ORDER BY могло использовать его для сортировки. Используйте следующий запрос:

SELECT YEAR(sys_date) as ysysdate, 
       MONTH(sys_date) as msysdate, 
       DATE_FORMAT(sys_date, "%Y-%c") as ymonth,
       COUNT(*)
FROM sale
GROUP BY ymonth
ORDER BY ysysdate ASC, msysdate ASC
...