SQL聚合函数使用MIN和AVG

时间:2009-09-01 14:23:47

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

如何在数据中省略零?

例如使用MIN功能?我希望最小值除了0 ...

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

MIN(availables.price)

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

谢谢,

7 个答案:

答案 0 :(得分:8)

尝试:

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

也适用于AVG:

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

答案 1 :(得分:5)

你在铁轨上使用红宝石吗?我认为你是因为这被标记为ruby-on-rails,在这种情况下,你可以简单地做

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

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

希望有帮助=)

答案 2 :(得分:3)

SELECT  MIN(CASE price WHEN 0 THEN NULL ELSE price END)
FROM    availables

答案 3 :(得分:2)

只需使用where子句将零保留在查询之外。

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

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

答案 4 :(得分:2)

SELECT MIN(availables.price) FROM availables WHERE availables.price <> 0.0

您还可以使用&gt;如果要排除小于0的任何内容。如果使用float或smallfloat数据类型,请注意浮点舍入问题。

如果有NULL,你也可以在ISNULL中包含where子句列(availables.price,0.0)以排除这些。

答案 5 :(得分:2)

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

答案 6 :(得分:2)

也许它可以做这项工作

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