【问题标题】:How can i solve this query in sql oracle?如何在 sql oracle 中解决此查询?
【发布时间】:2017-04-17 13:19:20
【问题描述】:

这是我正在学习的书中没有解决的练习。 目标是找到每月销售额最高的卖家, 在有注册信息的所有月份内。问题是我不知道如何将元组划分为一个月的周期。

第一个表是:

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)的总销售额,与一个月前,两个月前......只要有更旧的记录。并从每个卖家那里获得最大收益。然后你打印出上一个列表中销售额更高的卖家。如果一个卖家本月(4 月,即 sysdate)卖出了 400 件产品,而另一个卖家在去年 10 月卖出了 500 件,则结果将是第二个卖家。这就是我不知道该怎么做。

谢谢^^

【问题讨论】:

  • 您能分享一些示例数据以及您尝试获得的结果吗?
  • @Mureinik 我不确定你的意思,我试图得到的结果就是声明所要求的(?)。问题是我不知道如何将每个销售额划分为一个月的时间段,按卖家分组,并获取有记录以来每月销售额较高的业务员。
  • 穆雷尼克要问的是“你的输入数据的结构是什么”和“你想要的确切输出格式是什么”。例如,对于输入数据 - 你有什么?包含销售人员、交易日期和销售金额列的表格?日期是任何一个月内的任何日期?或者输入数据是否已经按月汇总?这些是我们无法在没有看到您的示例数据的情况下“猜到”的事情,或者您的详细解释。

标签: oracle oracle11g


【解决方案1】:

你可以试试这个查询

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

【讨论】:

  • 它返回给我每个卖家的总销售额,但仅限于 4 月份 (sysdate)。我们的想法是将本月的总数与一个月前、两个月前的总数进行比较……只要有较旧的记录。并获得最大。 @何塞
  • 我的错误。我在 group by 子句中使用 view_datetime 修改了查询。这将按卖家 ID 返回每月最高销售额。然后,您可以让您的 pl/sql 遍历记录集并进行比较
【解决方案2】:

有几点需要说明...

  • 桌子很奇怪。我假设您的表sellers 最好称为sales,对吗?
  • 在本例中,having count... >= 1 是一个空操作。如果根本没有行,则计数只能为 0,在这种情况下,group-by 输出中将没有行。您可以在此处忽略此计数。
  • 要获得每月的销售额,只需将月份添加到group by。 IE。 group by id_seller, To_date(view_datetime,'YYYYMM')

【讨论】:

  • 我没有解释清楚...想法是比较每个业务员在本月(sysdate)的总销售额,与一个月前,两个月前的总销售额......只要有较旧的记录。并从每个卖家那里获得最大收益。然后你打印出上一个列表中销售额更高的卖家。如果一个卖家本月(4 月,即 sysdate)卖出了 400 件产品,而另一个卖家在去年 10 月卖出了 500 件,则结果将是第二个卖家。这就是我不知道该怎么做。 @AnoE
  • 为此,先按上图进行分组,然后再将答案分组(按月份)并选择销售额最高的卖家。
  • 我真的很想这样做,但没有解决它,你能用一个例子来说明它吗?
猜你喜欢
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 1970-01-01
  • 2019-09-22
  • 2020-10-02
  • 1970-01-01
  • 2020-11-24
相关资源
最近更新 更多