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

Calculate best sale between several sellers

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

我需要计算(可能只用一个查询)这种格式的一个数组中每个月的最佳销售额:(一月:15000 美元,february: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 并编写一个不太好的代码。

美好的一天,周一生病检查

对不起我的英语

WITH monthly_sales AS (
SELECT 
date_trunc('month', date_vente) AS txn_month, 
user_id,
sum(prix_vente) as monthly_sum,
FROM crm_vente 
WHERE 1=1 
AND date_part('year', date_vente) =  2018 
GROUP BY txn_month, user_id
ORDER BY txn_month, user_id),

rank_monthly_sales_by_user_id AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY txn_month ORDER BY monthly_sum DESC) AS rank
FROM monthly_sales)

SELECT
txn_month,
monthly_sum
FROM rank_monthly_sales_by_user_id
WHERE rank = 1
ORDER BY txn_month ASC;

首先你应该做的是获取用户每月的总计。这是称为每月销售额的顶级子查询。 Monthly_sales按月汇总每个用户的销售额

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

ROW_NUMBER() 获取指定 window 中的行号,在本例中,它从 monthly_sales 开始对每个月的行进行排序(它从每月 1 开始再次排序). PARTITION BY 语句是我们要在其中执行行计数的 window,这里是月份,因为我们要按月对 user_id 的销售额进行排序。 ORDER BY 语句说明如何从 1 到 n 对行进行排序。我们按降序使用 monthly_sum。所以每月总和最高为1,最低为6

下一个查询仅从 rank_monthly_sales_by_user_id 中选择当月销量最高的行(WHERE rank = 1)

这给我们留下了一个输出,其中行是一个月,该月的销售额最高

让我知道您是否需要帮助