PostgreSQL分组依据和订单依据

PostgreSQL分组依据和订单依据,sql,postgresql,Sql,Postgresql,我有一张有日期栏的桌子。我想得到月份的计数,并按月份的顺序显示它们。月份应显示为‘一月’、‘二月’等。如果我使用to_char函数,则order by发生在文本上。我可以使用extract(month from dt),但它也将以数字格式显示月份。这是报告的一部分,月份应仅以“Mon”格式显示 SELECT to_char(dt,'Mon'), COUNT(*) FROM tb GROUP BY to_char(dt,'Mon') ORDER BY to_char(dt,'Mon'); to

我有一张有日期栏的桌子。我想得到月份的计数,并按月份的顺序显示它们。月份应显示为‘一月’、‘二月’等。如果我使用to_char函数,则order by发生在文本上。我可以使用extract(month from dt),但它也将以数字格式显示月份。这是报告的一部分,月份应仅以“Mon”格式显示

SELECT to_char(dt,'Mon'), COUNT(*)  FROM tb GROUP BY to_char(dt,'Mon') ORDER BY to_char(dt,'Mon');
 to_char | count 
---------+-------
 Dec     |     1
 Jan     |     1
 Jul     |     2

我试图在我的报告中不使用数字格式的月份。可能吗?编辑了我的问题以添加此内容。@Jayadevan您不能按别名使用所需的列吗?我给编辑过的答案中的列指定了别名,我正在perl脚本中使用它,并将输出转储到excel中。现在perl数组正在被转储到excel中。如果我有额外的列,我将不得不选择元素。这就是为什么我只想得到那些我需要的专栏。可能正在编写外部查询以仅拾取那些列,这样可能会起作用。从理论上讲,如果我写一个外部查询,order by不太可能成立,不是吗?尽管出于所有实际目的,它会被排序。如果你能解释这个查询为什么以及如何回答这个问题,那就太好了。对于其他用户来说,只使用代码的答案在将来更难适用于他们自己的情况。
select month, total
from (
    select
        extract(month from dt) as month_number,
        to_char(dt,'mon') as month,
        count(*) as total
    from tb
    group by 1, 2
) s
order by month_number