【问题标题】:Re-use aggregate result重复使用聚合结果
【发布时间】:2022-11-30 16:56:40
【问题描述】:

我正在寻找一种方法来重新使用应用于特定列的聚合函数的结果来过滤此列中的值。
跑步:

SELECT * FROM sales_info 
WHERE sales>(SELECT MIN(sales) from sales_info);

按预期返回排除了最小销售额的表。但是,我找不到在进一步计算中保留和重新使用这个最小值的方法。 尝试时:

WITH min_sales AS (SELECT MIN(sales) from sales_info)
        SELECT * FROM sales_info 
        WHERE sales> min_sales

我越来越:

错误:列“min_sales”不存在 第 3 行:在哪里销售> min_sales;

为什么会出现此错误?重用最小销售价值的最简单方法是什么?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    您需要在最终查询的 FROM 子句中包含 CTE:

    WITH min_sales AS (
      SELECT MIN(sales) as sales_min
      from sales_info
    )
    SELECT * 
    FROM sales_info 
    WHERE sales> (select sales_min from min_sales);
    

    或者

    WITH min_sales AS (
      SELECT MIN(sales) as sales_min
      from sales_info
    )
    SELECT si.*
    FROM sales_info si
      cross join min_sales ms
    WHERE si.sales > ms.sales_min;
    

    【讨论】:

      猜你喜欢
      • 2019-08-22
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 2018-06-18
      • 2010-11-20
      • 1970-01-01
      • 2019-05-03
      • 2020-07-01
      相关资源
      最近更新 更多