按月oracle排序

时间:2015-05-25 14:28:14

标签: sql oracle

我正在尝试通过一个名为“salestransaction”的表格进行简单的查询,以查找每月的平均汽车销售额。

我的代码:

    select to_char(st.dateofsale, 'MON') as mnth, count(*) / 2 as Average_Car_Sales
    from salestransaction st
    group by to_char(st.dateofsale, 'MON')
    order by to_char(st.dateofsale, 'MON');

我按月份的订单没有输出正确的订单。 我可以做些什么来按月输出?从JAN - DEC开始?

谢谢。

3 个答案:

答案 0 :(得分:3)

我的建议:

order by min(st.dateofsale);

也就是说,只需为每个组拉出一个值,然后将其用于排序。

如果您有多年的数据,上述内容可能无效。代替:

order by min(extract(month from st.dateofsale))

答案 1 :(得分:2)

一种简单的方法是将月号添加到分组依据,然后按此字段排序:

select to_char(st.dateofsale, 'MON') as mnth, 
       count(*) / 2 as Average_Car_Sales
from salestransaction st
group by EXTRACT(month FROM st.dateofsale),
         to_char(st.dateofsale, 'MON')
order by EXTRACT(month FROM st.dateofsale);

如果您尝试在没有聚合功能的情况下订购或者没有按表达式添加月份编号,那么您将收到ORA-00979: not a GROUP BY expression错误

为避免Extract,您可以使用带有MM模式的to_char:

select to_char(st.dateofsale, 'MON') as mnth, 
       count(*) / 2 as Average_Car_Sales
from salestransaction st
group by to_char(st.dateofsale, 'MM'),
         to_char(st.dateofsale, 'MON')
order by to_char(st.dateofsale, 'MM');

答案 2 :(得分:0)

因为在这种情况下你根据月份名称订购它们,12月份到了1月份之前。你需要得到他们的数值。 这是oracle documantation的一个例子:

SELECT EXTRACT(月份来自order_date)"月份",

COUNT(order_date)"没有。订单"

FROM orders

GROUP BY EXTRACT(月份来自order_date)

ORDER BY EXTRACT(月份来自order_date)

您可以在此链接中查看更多详细信息:

http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions050.htm