按 ASC 排序 DATE_FORMAT '%Y-%c'
Sort DATE_FORMAT '%Y-%c' in ASC
我有疑问
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
即returns下面的结果,
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
和网站上列出的许多其他选项。但似乎没有任何效果。
根据YEAR and MONTH直接从sys_date
获得的数据进行排序。由于您启用了 only_full_group_by
模式,因此您需要在 SELECT
部分中获取 YEAR
和 MONTH
值,以便 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
因为计算出来的month
是按字母顺序排列的。但是您可以保留 ORDER BY month
并将其更改为前导 0 的格式,表示月份 < 10.
这样字符串值都将具有相同的长度,并且按字母顺序排序将是正确的。
因为比较字符串时 '10' < '9' 但 '09' < '10'
为此,只需将 %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
我有疑问
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
即returns下面的结果,
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
和网站上列出的许多其他选项。但似乎没有任何效果。
根据YEAR and MONTH直接从sys_date
获得的数据进行排序。由于您启用了 only_full_group_by
模式,因此您需要在 SELECT
部分中获取 YEAR
和 MONTH
值,以便 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
因为计算出来的month
是按字母顺序排列的。但是您可以保留 ORDER BY month
并将其更改为前导 0 的格式,表示月份 < 10.
这样字符串值都将具有相同的长度,并且按字母顺序排序将是正确的。
因为比较字符串时 '10' < '9' 但 '09' < '10'
为此,只需将 %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