计算几个卖家之间的最佳销售
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)
这给我们留下了一个输出,其中行是一个月,该月的销售额最高
让我知道您是否需要帮助
我正在使用 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)
这给我们留下了一个输出,其中行是一个月,该月的销售额最高
让我知道您是否需要帮助