如何使用查询在Oracle SQL Developer中汇总数据?

时间:2017-02-10 20:36:52

标签: sql oracle

我在SQL Developer上练习OE架构数据库,我无法弄清楚如何解决这个问题。我试图获得由州和年/月汇总的客户总支出。

我的sql代码:

SELECT    
    c.cust_address.state_province,
    SUM(o.order_total) AS Total_of_Sales,
    TO_CHAR(o.order_date, 'YYYY-MM') AS Year_Month
FROM
    oe.customers c,
    oe.orders o
WHERE
    c.customer_id = o.customer_id
GROUP BY
    c.cust_address.state_province,
    o.order_date
ORDER BY  
    o.order_date;

查询结果:

[Result of query]

但是,正如您在此处所见,状态和年/月的数据仍未分组。相反,它们在同一个月的每个州都有3行,我需要将它们相加为一个。

有人可以指导我如何纠正我的代码以获得我想要的结果吗?

2 个答案:

答案 0 :(得分:0)

首先,从不FROM子句中使用逗号。 始终使用正确的,明确的JOIN语法。如果您正在学习SQL,这一点就更为重要。不要学习坏习惯!

您需要按Year_Month表达式进行汇总:

SELECT c.cust_address.state_province,
       SUM(o.order_total) AS Total_of_Sales,
       TO_CHAR(o.order_date, 'YYYY-MM') AS Year_Month
FROM oe.customers c JOIN
     oe.orders o
     ON c.customer_id = o.customer_id
GROUP BY c.cust_address.state_province, TO_CHAR(o.order_date, 'YYYY-MM')
ORDER BY TO_CHAR(o.order_date, 'YYYY-MM');

在某些数据库中,您可以使用Year_Month中的列别名(GROUP BY)。 Oracle不是这些数据库之一。

答案 1 :(得分:0)

你应该使用Year_Month ... TO_CHAR(o.order_date,' YYYY-MM')in ..(和order by)

SELECT    c.cust_address.state_province,
          SUM(o.order_total) AS Total_of_Sales,
          TO_CHAR(o.order_date, 'YYYY-MM') AS Year_Month
FROM      oe.customers c,
          oe.orders o
WHERE     c.customer_id = o.customer_id
GROUP BY  c.cust_address.state_province, TO_CHAR(o.order_date, 'YYYY-MM')
ORDER BY  TO_CHAR(o.order_date, 'YYYY-MM');

否则您获得与o.order_date相同的粒度