首页 > 解决方案 > 从整数转换后如何按名称排序月份?

问题描述

我正在学习 Postgresql。我有这张带有日期(DateTime 类型)和订单的表。我的目标是显示一个月内完成的订单数量,但我还需要按顺序显示月份的名称。

我能够完成第一部分,但我无法弄清楚如何订购月份,因为我已经将它们从日期转换为字符串。所以这就是我一直在做的事情:

SELECT TO_CHAR(created_at, 'Month') as month_name, COUNT(id) as orders
FROM orders
WHERE aasm_state != 'cart'
GROUP BY month_name
ORDER BY to_date(month_name, 'Month')

然后,我得到“错误:列“month_name”不存在”。

我知道问题出在最后一行,因为如果我把它拿出来,我就不会出错。

提前致谢。

标签: sqlpostgresql

解决方案


order by可以只使用列别名:

SELECT TO_CHAR(created_at, 'Month') as month_name, COUNT(id) as orders
FROM orders
WHERE aasm_state <> 'cart'
GROUP BY month_name
ORDER BY month_name;

您查询中的问题是month_name. 如果代码运行,您仍然会收到类型转换错误(我认为)。

所以,month_name可以用在ORDER BY. 但是,它不能用于表达式。

按时间顺序排序的最简单方法是:

order by min(created_at)

推荐阅读