我打印出每个州的总销售额,只要他们当月的销售额超过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
答案 0 :(得分:1)
我认为您的GROUP BY
和ORDER 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上分组但只显示月份部分。 您的示例中的顺序将按月份的文本排序,而不是按实际的时间顺序排序。
希望它有所帮助。