SQL: 如何在SELECT语句中对特定的聚合函数应用WHERE子句过滤?

问题描述 投票:0回答:1

对于一个不完整的数据集,我需要在执行聚合函数的同时,避免只有特定的聚合函数的空值都来自同一个表。所以比如我尝试把它放在子查询中。

WITH spend AS (
  SELECT
    (SUM(current_spend)-SUM(baseline_spend))/SUM(baseline_spend) percent_change_spend
  FROM 
   `table_one`
  WHERE
    baseline_spend IS NOT NULL
),

sales AS (
  SELECT
    (SUM(current_sales)-SUM(baseline_sales))/SUM(baseline_sales) percent_change_sales
  FROM
    `table_one`
  WHERE
    baseline_sales IS NOT NULL
)

SELECT
    percentage_change_spend,
    percentage_change_sales
FROM
    table_one ...

我不能像应用常规查询那样使用常规查询。WHERE baseline_spend IS NOT NULLbaseline_sales IS NOT NULL 会影响两个聚合函数,因为它是先过滤整个数据集。

有什么建议吗?谢谢

EDIT.我希望在汇总数据时,只忽略第4行,而销售汇总则只忽略第4行。

例如,我希望在汇总时,支出汇总只忽略第4行,销售汇总只忽略第2行。

我就希望最终的结果是。

enter image description here

sql aggregate-functions where-clause
1个回答
0
投票

聚合函数忽略 NULL 值,所以这应该是你想要的。

SELECT (SUM(current_spend)-SUM(baseline_spend)) / SUM(baseline_spend) as percent_change_spend,
       (SUM(current_sales)-SUM(baseline_sales)) / SUM(baseline_sales) as percent_change_sales
FROM `table_one`
© www.soinside.com 2019 - 2024. All rights reserved.