我正在使用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并编写不好的代码。
好天,星期一检查病
对不起,我的英语水平
答案 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是一个月,该月的销售额最高
让我知道这是否是您需要的帮助