计算几个卖家之间的最佳销售

时间:2018-09-27 17:09:56

标签: postgresql business-intelligence

我正在使用postgre。 假设有5个卖家。 每个月的销售记录都这样记录在数据库内(userId:6,一月:10000 $,二月:20000 $,三月:10000 $ ...,十二月:50000 $,年:2018)

我只需要计算一个查询,就可以用这种格式的数组来计算每个月的最佳销售:(一月:15000 $,二月:30000 $,三月:40000 $,年:2018),我没有需要userId。我只需要比较每月的每笔交易并显示最佳金额...

就目前而言,我已经有了这段代码,该代码运行良好,可以为用户提供给定年份的每月6次销售量:

SELECT date_trunc('month', date_vente) AS txn_month, sum(prix_vente) as  monthly_sum,count(prix_vente) AS monthly_count
FROM crm_vente 
WHERE 1=1 
AND date_part('year', date_vente) =  2018 
AND id_user = 6
GROUP BY txn_month ORDER BY txn_month 

我想知道是否有人可以告诉我,在5名员工中,每12个月我可以使用哪种技术来获得最佳销售。

我可以使用视图吗?我最好在php中做一个for循环,每个用户每月的销售额,然后做一个比较数组吗?

不需要给我一个完整的解决方案,但也许可以直接通过postgre提出有关如何做的建议?因为我目前唯一的解决方案是使用php并编写不好的代码。

好天,星期一检查病

对不起,我的英语水平

1 个答案:

答案 0 :(得分:0)

function loadSidebarValues() {
  if (dateText != 'ErrorStuff') {
    var div = document.getElementById('dateValue');
    div.innerHTML = dateText;
    var errorDiv = document.getElementById('error');
    errorDiv.innerHTML = "";
    $('#dateText').val(
      PropertiesService.getScriptProperties().getProperty('dateColumn')
    );
  } else {
    var div = document.getElementById('sidebarValues');
    div.innerHTML = "";
    var errorDiv = document.getElementById('error');
    errorDiv.innerHTML = 'There was an error.';
  }
  var scriptProperties = PropertiesService.getScriptProperties();
  scriptProperties.setProperties({
    'dateColumn': 'dateText',
  });
  Logger.log("date: " + userProperties.getProperty('dateColumn'));
}

function onLoad(){
  if (PropertiesService.getScriptProperties().getProperty('dateColumn') != null) {
    loadSidebarValues();
  };
}

首先,您应该做的是按用户获取每月总数。这是称为月度销售额的顶部子查询。 Monthly_sales按月汇总每个用户的销售额

接下来,要获得每月总销售额最高的用户,您必须对前一个子查询返回的行进行排名。下降了ROW_NUMBER()

ROW_NUMBER()获取指定窗口中的行号,在这种情况下,它将按月从monthly_sales中对行进行排序(它从每月1开始重新排序)。 PARTITION BY语句是我们要在其中执行行计数的窗口,这里是月份,因为我们要按月订购user_id的销售额。 ORDER BY语句说明如何对1到n的行进行排序。我们使用降序排列的monthly_sum。因此,每月最高金额为1,最低金额为6

下一个查询仅从rank_monthly_sales_by_user_id中选择当月销售额最高的行(WHERE等级= 1)

这将为我们提供输出,其中row是一个月,该月的销售额最高

让我知道这是否是您需要的帮助