【发布时间】:2019-08-08 07:20:57
【问题描述】:
我想出了如何使用 condition/s 执行 avg 函数,但我无法让它满足我的特定需求。 假设我正在使用名为 sales_performance 的表
product_ID sales_period sales_qty sales_index product_sub goal_met
C12 0001 15 20 D71 Y
D71 0001 07 09 C12 N
F20 0001 25 30 C05 Y
C05 0001 10 15 F20 N
C12 0002 15 30 C05 Y
C05 0002 12 06 C12 N
D71 0002 30 20 F20 Y
F20 0002 20 15 D71 N
C12 0003 05 04 F20 N
F20 0003 40 35 C12 Y
D71 0003 20 20 C05 Y
C05 0003 12 10 D71 N
我想为产品 C12 计算一个名为 sales_index_goal 的新值。那么,这个值的公式是:
产品
'C12'和Goal_Met = 'Y'的sales_index和sub_product的sales_index和Goal_Met = 'N'在之前的销售期间的平均值。
例如,如果我想为 sales_period 0003 计算产品 'C12' 的 sales_index_goal,它将计算为:
(
30,20,15) 的平均值,其中30和20是产品'C12'在销售期间'C12'的sales_indexes1和@9876543440@ 和@9876 @是产品'F20'在销售期间2的sales_index。
我在计算确切销售期间的这个值时没有任何问题。但是,我很难想出一个查询来计算所有销售期间产品'C12' 的此值。目前,我编写了这个不起作用的查询:
SELECT
s.*,
AVG(CASE
WHEN s2.goal_met = "Y" AND s2.product_id = "C2"
THEN s2.sales_index
WHEN s2.product_id = (
SELECT s2.product_sub WHERE s2.product_id = "C12"
) AND s2.goals_met = "N"
THEN s2.sales_index
ELSE NULL
END)
OVER (
ORDER BY s.sales_period
ROWS BETWEEN UNBOUNDED PRECEDING AND 1 PRECEDING
) AS sales_index_goal
FROM
sales_performance s,
sales_performance s2
WHERE s.product_id = "C12"
我非常感谢您对此的任何帮助。奖励:为所有销售期间的所有产品计算此值。
编辑:以下答案适用于计算产品 C12 的 sales_index_goal 但是,它不适用于产品 F20(有关它不起作用的更详细原因在我在答案下方的评论中) 可以看到查询产品F20here的结果
【问题讨论】:
标签: sql sqlite conditional average