我在用postgre。假设有5个卖家。每个月的销售记录在这样的数据库中(用户is :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
我不知道是否有人能告诉我,我可以用什么样的技术来获得最好的销售每12个月之间的5名雇员。
COuld我用视图?SHould我最好在php中做一个for循环,用每个用户每个月的销售额,然后做一种比较数组?
没有必要给我一个完整的解决方案,但也许是一个如何做的建议,直接与postgre?因为我现在唯一的解决方案是使用php并做一个不太好的代码。
天气不错,我去看看MOnday
对不起我的英语
发布于 2018-09-28 11:27:56
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开始重新排序)。分区BY语句是我们要在其中执行行计数的窗口,这里是月份,因为我们希望按月对user_id的销售进行排序。order语句说明了如何对从1到n的行进行排序。我们使用的是降序monthly_sum。所以每月最高的金额是1,最低的是6。
下一个查询是只从rank_monthly_sales_by_user_id中选择行,这些行是当月销售额最高的(其中秩= 1)
这就给我们留下了一个产出,该行是一个月,当月销售额最高。
如果你需要帮助的话,请告诉我。
https://stackoverflow.com/questions/52542018
复制相似问题