按月订购总销售额

时间:2014-02-25 21:30:03

标签: sql oracle10g

我打印出每个州的总销售额,只要他们当月的销售额超过6000美元。结果需要按月(降序)排序。我注意到我在同一个月里得到了德克萨斯州的2个结果。所以它告诉我的是,它只是寻找超过6,000美元的个人销售额,即使我有一笔总和(so.total),我认为这将给出按月订购的州的总销售额。如果order_date字段中包含日 - 月 - 年,则不确定如何按每个月分解销售额。(使用Oracle 10g)

输入:

 SELECT c.state "State",to_char(so.order_date, 'Month')"Month", sum(so.total)"Sales"
 FROM a_customer c
 JOIN a_sales_order so ON c.customer_id=so.customer_id
 GROUP BY c.state, so.order_date
 HAVING sum(so.total)>6000
 ORDER BY to_char(so.order_date, 'MM') desc

输出:

State Month        Sales
----- --------- --------
TX    September   $8,400 
CA    July        $8,377 
TX    March       $7,700 
TX    March       $8,540 
CA    February   $46,370 
MN    February    $6,400 
CA    February   $24,650 

1 个答案:

答案 0 :(得分:1)

我认为您的GROUP BYORDER BY条款可能存在问题。

尝试:

SELECT c.state AS "State",
       to_char(so.order_date, 'Month') AS "Month", 
       sum(so.total) AS "Sales"
  FROM a_customer c
  JOIN a_sales_order so ON c.customer_id=so.customer_id
 GROUP BY c.state, 
       to_char(so.order_date, 'Month')
HAVING sum(so.total)>6000
 ORDER BY to_date(to_char(so.order_date, 'Month'), 'Month') desc

我目前没有在我面前有一个工作实例来尝试它但是你需要确保你在显示的输出上进行分组,在原始的例子中,你是在整个order_date上分组但只显示月份部分。 您的示例中的顺序将按月份的文本排序,而不是按实际的时间顺序排序。

希望它有所帮助。