2017-04-17 58 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它与一个例子吗? –