Агрегатные функции SQL с использованием MIN и AVG - PullRequest
1 голос
/ 01 сентября 2009

Как я могу опустить нули в моих данных?

Например, используя функцию MIN? Я хотел бы минимальное значение, кроме 0 ...

Как я могу получить следующий по величине?

MIN(availables.price)

Также есть ли способ пропустить 0 с таким же образом, если я использую функцию AVG? Проблема в том, что таблица, которую я унаследовал, не использует значения NULL, но имеет 0,00 для всех финансовых данных.

Спасибо

Ответы [ 7 ]

8 голосов
/ 01 сентября 2009

попробовать:

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

работает и с AVG:

SELECT
    avg(x)
    FROM ....
    where x<>0
5 голосов
/ 01 сентября 2009

вы используете рубин на рельсах? я предполагаю, что вы так как это помечено как ruby-on-rails, в этом случае вы можете просто сделать

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

или

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

надеюсь, что поможет =)

3 голосов
/ 01 сентября 2009
SELECT  MIN(CASE price WHEN 0 THEN NULL ELSE price END)
FROM    availables
2 голосов
/ 01 сентября 2009

Может быть, это может сделать работу

SELECT MIN(availables.price)
FROM   availables
WHERE  0 < availables.price
2 голосов
/ 01 сентября 2009
SELECT  MIN(price)
FROM    availables
WHERE price <> 0
2 голосов
/ 01 сентября 2009
SELECT MIN(availables.price) FROM availables WHERE availables.price <> 0.0

Вы также можете использовать>, если хотите исключить что-либо меньше 0. Будьте осторожны с проблемами округления с плавающей запятой, если вы используете типы данных с плавающей запятой или smallfloat.

Если есть NULL, вы можете также обернуть столбец условия where в ISNULL (availables.price, 0.0), чтобы исключить их.

2 голосов
/ 01 сентября 2009

Просто не указывайте нули в запросе с помощью предложения where.

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

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