【问题标题】:SQL aggregate functions using MIN and AVG使用 MIN 和 AVG 的 SQL 聚合函数
【发布时间】:2010-11-24 16:02:56
【问题描述】:

如何在我的数据中省略零?

例如使用 MIN 函数?我想要除 0 以外的最小值...

我怎样才能得到下一个最大的?

MIN(availables.price)

如果我使用 AVG 功能,是否还有一种通用的方法可以以相同的方式跳过 0?问题是我继承的表没有使用 NULL 值,但所有财务数据都为 0.00。

谢谢,

【问题讨论】:

    标签: sql ruby-on-rails aggregate average aggregate-functions


    【解决方案1】:

    尝试:

    SELECT
        MIN(x)
        FROM ....
        where x<>0
    

    也适用于 AVG:

    SELECT
        avg(x)
        FROM ....
        where x<>0
    

    【讨论】:

    • 这是假设您不处理负值。
    • OP 说:“我想要除 0 以外的最小值”,所以我将答案从 WHERE x>0 编辑到 WHERE x0 但是,我认为负价格是不可能的,但以防万一......
    【解决方案2】:

    你在 Rails 上使用 ruby​​ 吗?我想你是因为这被标记为 ruby​​-on-rails,在这种情况下,你可以简单地做

    Available.minimum(:price, :conditions => "price > 0")
    

    Available.average(:price, :conditions => "price > 0")
    

    希望对您有所帮助 =)

    【讨论】:

      【解决方案3】:
      SELECT  MIN(CASE price WHEN 0 THEN NULL ELSE price END)
      FROM    availables
      

      【讨论】:

        【解决方案4】:

        只需使用where 子句将零从查询中删除即可。

        select min(price)
        from price_table
        where price > 0;
        
        select avg(price)
        from price_table
        where price > 0;
        

        【讨论】:

          【解决方案5】:
          SELECT  MIN(price)
          FROM    availables
          WHERE price <> 0
          

          【讨论】:

            【解决方案6】:

            也许它可以完成这项工作

            SELECT MIN(availables.price)
            FROM   availables
            WHERE  0 < availables.price
            

            【讨论】:

              【解决方案7】:
              SELECT MIN(availables.price) FROM availables WHERE availables.price <> 0.0
              

              如果您想排除任何小于 0 的值,也可以使用 >。如果您使用 float 或 smallfloat 数据类型,请注意浮点舍入问题。

              如果有 NULL,您还可以将 where 子句列包装在 ISNULL(availables.price, 0.0) 中以排除它们。

              【讨论】:

              • 如果我没记错的话,您不必担心排除 NULL,因为这些不包含在 MIN 聚合器中。
              • 不是标准的,它取决于您的平台和您的 ANSI 选项。在 SQL Server 中默认为 true,但可以更改。
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2013-07-18
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多