2009-09-01 36 views
1

如何在我的数据中省略零?使用MIN和AVG的SQL聚合函数

例如使用MIN函数?我想最小值除了0 ...

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

MIN(availables.price) 

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

感谢,

回答

8

尝试:

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

作品与AVG太:

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

这是假设你不处理负面的价值观。 – 2009-09-01 14:30:13

+2

好点,但价格为负? :) – Rippo 2009-09-01 14:39:23

+0

OP说:“我想最小值除了0”,所以我编辑我的答案:_WHERE x> 0_到_WHERE x <> 0_然而,我不认为一个负的价格是可能的,但只是以防...... – 2009-09-01 15:08:28

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

刚刚离开零点出来的查询与where条款。

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

select avg(price) 
from price_table 
where price > 0; 
2
SELECT MIN(availables.price) FROM availables WHERE availables.price <> 0.0 

您还可以使用>如果你想排除任何小于0要小心浮点四舍五入问题,如果你使用float或SMALLFLOAT数据类型。

如果存在NULL,那么也可以将where子句列包装在ISNULL(availables.price,0.0)中以排除这些列。

+0

如果我没有记错,你不应该担心排除NULL,因为那些不包含在MIN聚合器中。 – Tadmas 2009-09-01 14:35:21

+0

不符合标准,取决于您的平台和ANSI选项。在默认情况下为true的SQL服务器中,可能会更改。 – 2009-09-01 15:16:55

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

也许它可以做

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

您使用Ruby on Rails的工作?我以为你是因为这个被标记为的Ruby-on-轨道,在这种情况下,你可以简单地做

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

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

希望帮助=)