我在一家卖艾比克斯的小公司工作。基本产品是一辆4.4Ah电池的自行车。作为一个选项,客户可以选择升级到7Ah电池。这就给我们留下了这样的产品名称:
eBike someName 4,4Ah restOfTheName
Upgrade 7Ah restOfTheName
现在,我想使用PostgreSQL表创建一个销售报告,如下所示:
id | orderNumber | date | articleID | clientID | quantity | value
我遇到的问题是,我无法将4,4Ah与7Ah“分离”为物理7Ah=eBike 4,4Ah,并进行7Ah升级。
我想根据所售自行车的电池类型对其进行分类。为此,我目前计划使用如下方法(当然要替换XXXXX):
SELECT
CASE
WHEN "articles__via__bc_2018_article"."article_name" LIKE 'Upgrade%' THEN '7Ah'
WHEN "articles__via__bc_2018_article"."article_name" LIKE '%4,4Ah%' THEN XXXXXXXXXX
END AS "Item",
sum("public"."bc_2018"."bc_2018_quantity") AS "sum"
现在我的问题是:有没有一种基于
sum(quantity)
的数学方法?我可以想出另外两种方法来达到预期的效果:
使用orderNumber:如果4的orderNumber=7Ah的orderNumber,则=7Ah
使用子查询:从不包含7Ah的订单中选择4,4Ah。
也许我还能做点别的/更好的事?(对不起,我还是个初学者)
谢谢
编辑:附加信息
在上表中,“quantity”列已经是一个计数。有些行在每个orderNumber中占1个以上的项,因此使用
4,4Ah - Upgrade
函数比较复杂,最好执行COUNT()
最佳答案
这是一个有点黑暗的刺刀,因为我想看到一些实际的数据和期望的结果之前,我跳到任何结论。不管怎样,我认为您可能会受益于一个中间步骤,即创建一个“category”列,将每个记录放入一个有限的可能性列表中。从那里,您可以非常快速地扩展和创建数量、订单、行、收入等的分析。
下面是一个创建四个类别的快速示例,然后运行一些快速分析来查找各个类别的订单计数。
with categorized as (
select
a.*,
case
when a.article_name like '%4,4Ah%Upgrade%7Ah' then '7Ah Upgrade'
when a.article_name like '7Ah' then '7Ah'
when a.article_name like '4,4Ah' then '4,4Ah'
else 'Unknown'
end as category
from articles a
)
select
count (distinct order_number) filter (where category = '7Ah Upgrade') as upgrades,
count (distinct order_number) filter (where category like '7Ah') as all_7ah,
count (distinct order_number) filter (where category = '4,4Ah') as base_model
from categorized
记住,在这个例子中,顺序计数是重叠的——但同样,一旦定义了类别,您就可以完全控制顺序计数了。
关于postgresql - PostgreSQL-案例中的数学,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49382109/