您如何计算每月达到 100 次销售目标所需的最低销售额?

Posted

技术标签:

【中文标题】您如何计算每月达到 100 次销售目标所需的最低销售额?【英文标题】:How do you calculate the minimum number of sales it took to reach a sales goal of 100 for each month? 【发布时间】:2020-10-16 16:07:16 【问题描述】:

编写一个查询,找出每月至少需要多少销售额才能达到超过 100 的累计销售额。

表格代码:

DROP TABLE IF EXISTS q1sales;

CREATE TABLE q1sales (
year double precision,
month integer,
sales integer
);

INSERT INTO q1sales VALUES 
(2019, 1, 37),
(2019, 1, 63),
(2019, 1, 22),
(2019, 1, 27),
(2019, 2, 27),
(2019, 2, 40),
(2019, 2, 76),
(2019, 2, 24),
(2019, 3, 46),
(2019, 3, 74),
(2019, 3, 23),
(2019, 3, 95);

预期输出:

year month min_num_of_sales
2019     1                3
2019     2                2
2019     3                2

例如,在 1 月 (1) 月份,需要 3 次销售(37、63、22 - 或 - 37+63+27)才能达到超过 100 次的销售额。

这是我尝试过的:

select year, month, (
select 
count(s) filter(where month = 1) and s in 
(select sum(s) as sums from sale2 where sums > 100)
from sale2
) 
from sale2;

但这不正确,我不知道从哪里开始。

【问题讨论】:

欢迎来到 SO。请只标记相关的关系型数据库 @Strawberry:给定聚合函数的 filter 子句,这必须是 Postgres。 请确定您的主键 【参考方案1】:

您可以使用窗口函数。这个想法是枚举每个月的行,从最大的sale开始,并计算相应的运行总和。然后,您可以在达到阈值时对行进行过滤:

select year, month, rn min_num_of_sales
from (
    select s.*, 
        sum(sales) over(partition by year, month order by sales desc) running_sales,
        row_number() over(partition by year, month order by sales desc) rn
    from q1sales s
) t
where running_sales > 100 and running_sales - sales <= 100

Demo on DB Fiddle

年份 |月 | min_num_of_sales :--- | ----: | ---------------: 2019 | 1 | 3 2019 | 2 | 2 2019 | 3 | 2

【讨论】:

以上是关于您如何计算每月达到 100 次销售目标所需的最低销售额?的主要内容,如果未能解决你的问题,请参考以下文章

使用递归计算每月信用卡最低还款额

每个用户达到的标记数量阈值

怎么算每月应交的增值税?

运行我的小程序所需的最低 Java 版本

指定的目标 Flash Player 版本 11.1.0.0 应等于或高于 Flex SDK 所需的最低版本 23.0.0.0

Tensorflow:Cuda 计算能力 3.0。所需的最低 Cuda 能力为 3.5