2017-02-10 73 views
1

我正在與SQL Developer的OE模式數據庫一起練習,我無法弄清楚如何解決這個問題。我試圖獲得由國家和年/月總結的客戶總消費。如何使用查詢彙總Oracle SQL Developer中的數據?

我的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行,當我需要他們總結一個。

任何人都可以指導我如何糾正我的代碼,以得到我想要的結果?

+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'); 

在一些數據庫中,你可以在GROUP BY使用列別名(Year_Month)。 Oracle不是這些數據庫之一。

+0

我的最後一位教授教我如何在我的sql代碼中使用JOIN和ON,但我的新教授筆記甚至沒有包含任何這樣的內容,只是困惑於要遵循哪種方式。此外,他在筆記中的所有查詢都使用逗號,這就是爲什麼即時通訊遵循這種方式,但感謝您的提示和回答我的問題。我會嘗試讓它現在工作 –

+1

顯式的'JOIN'語法是在近25年前的ANSI-92標準中引入的。也許是時候讓你的教授回去上學了。 –

+1

@KurtLee - 很抱歉,你的教授已經落伍了。我希望你不要付太多錢來聘請這樣的教授。 – mathguy

0

應該通過組使用YEAR_MONTH ... TO_CHAR(o.order_date, 'YYYY-MM')。(和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

+0

@mathguy correct ..answer updated .. – scaisEdge