2017-04-17 62 views
0

這是一個在我正在學習的書中沒有解決的練習。 目標是找出每月有最高銷售數量的賣家, 在有註冊信息的所有月份中。問題是我不知道如何將元組分成一個月的時間段。我如何解決這個查詢在SQL oracle?

第一個表是:

Table Sellers 

Id_seller 
Name_Product 

而另一種是:

Table Product 

Name_Product 
View_datetime 
Budget 

我做了什麼?

我做了這個查詢:

SELECT id_seller FROM(SELECT id_seller, COUNT(id_seller) 
FROM SELLERS INNER JOIN PRODUCT 
ON SELLERS.name_product = PRODUCT.name_product 
GROUP BY id_seller HAVING COUNT(id_seller)>= 1 
ORDER BY 2 DESC) 
WHERE ROWNUM = 1; 

查詢返回了我大部分的銷售做了賣家,而不是「每月因爲有記錄」的聲明要求。有任何想法嗎?我很迷茫......

這個想法是比較本月每個推銷員(sysdate)與一個月前,兩個月前的銷售額的總銷售額......只要有較舊的記錄。並從每個賣家獲得最大價值。然後,您從前面的列表中打印出更多銷售額的賣家。如果賣家本月銷售400件產品(4月,系統日期),而另一個賣家去年10月售出500件,則結果將是第二個賣家。這是我不知道該怎麼做的。

謝謝^^

+0

你能分享一些樣本數據和你試圖得到的結果嗎? – Mureinik

+0

@Mureinik我不知道你的意思,我試圖得到的結果是聲明要求(?)。 問題是,我不知道如何將每個銷售分爲一個月的時間段,通過銷售者將其分組,並獲得自有記錄以來每個月銷售更多的銷售員。 –

+0

Mureinik問的是「輸入數據的結構是什麼」以及「你期望的輸出格式是什麼」。例如,對於輸入數據 - 你有什麼?有銷售員專欄,交易日期和銷售金額的表格?日期是在任何月份的任何日期?或者是按月份彙總的輸入數據?這些是我們無法看到您的樣本數據而「猜測」的事情,或者是您非常詳盡的解釋。 – mathguy

回答

0

你可以試試這個查詢

select MonthName, id_seller, max(TotalSales) from ( select to_char(sysdate, 'Month') MonthName, sellers.id_seller, count(sellers.id_seller) TotalSales from sellers inner join product on sellers.name_product = product.name_product group by to_char(view_datetime, 'Month'), sellers.id_seller ) tab group by MonthName, id_seller

+0

它返回每個賣家的銷售總數,但僅限於4月份的月份(sysdate)。我們的想法是將本月的總數與兩個月前的一個月前的數據進行比較......只要存在較舊的記錄即可。並獲得最大的。@jose –

+0

我的錯誤。我用group by子句中的view_datetime修改了查詢。這將通過賣家ID返回明智的最高銷售額。然後你可以讓你的pl/sql遍歷記錄集並獲得比較結果 – userDee

0

有幾個點使...

  • 的表是怪異。我假設你的表sellers最好叫sales,對吧?
  • 在這個例子中,having count... >= 1是無操作的。如果根本沒有行,Count只能是0,在這種情況下,group-by輸出中不會有行。你可以在這裏留下這個數字。
  • 要獲得每月的銷售額,只需將月份添加到group by即可。即group by id_seller, To_date(view_datetime,'YYYYMM')
+0

我沒有解釋清楚......這個想法是比較每個銷售員在本月的總銷售額(sysdate)與一個月前的銷售額,兩個月前...只要有更舊的記錄。並從每個賣家獲得最大價值。然後,您從前面的列表中打印出更多銷售額的賣家。如果賣家本月銷售400件產品(4月,系統日期),而另一個賣家去年10月售出500件,則結果將是第二個賣家。這是我不知道該怎麼做的。 @AnoE –

+0

爲此,第一組如上所示,然後再次(按月)對答案進行分組,並選擇銷售額最高的賣家。 – AnoE

+0

我真的想做到這一點,但不解決它,你可以ilustrate它與一個例子嗎? –