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



我正在使用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 并做一个不太好的代码.

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

对不起我的英语

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

下一个查询是仅选择当月销售额最高的行(WHERE 排名 = 1( rank_monthly_sales_by_user_id

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

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

相关内容

最新更新