[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: AVG и условие
Evilsoul
есть запрос:

"SELECT 
ROUND(AVG(A80),2) AVG_A80,
ROUND(AVG(A92),2) AVG_A92,
ROUND(AVG(A95),2) AVG_A95,
ROUND(AVG(DT),2) AVG_DT,
ROUND(AVG(gas),2) AVG_gas,
DATE_FORMAT(date, '%d') AS day,
DATE_FORMAT(date, '%d.%m') AS my_date
FROM price_fuel AS fuel
WHERE date>DATE_ADD(curdate(),INTERVAL -31 DAY)
GROUP BY my_date
ORDER BY date ASC"


Как сделать что бы функция AVG пропускала ячейки с нулевым значением?



Спустя 19 минут, 16 секунд (21.04.2011 - 10:58) Renden написал(а):
Evilsoul
AVG () возвращает NULL, если нет соответствующих строк.
может саму эту функцию запихнуть в функцию IFNULL или IS NOT NULL?

Спустя 10 минут, 48 секунд (21.04.2011 - 11:09) Renden написал(а):
Evilsoul
хотя ты знаешь, я только что попробывал, у меня она пропускает пустые ячейки, она их не считает..
Пустые именно в плане null, а не просто пустая, это разные вещи, или у тя прям в ячейках 0 -ли стоят?

Спустя 5 минут, 43 секунды (21.04.2011 - 11:14) Evilsoul написал(а):
Renden
да, стоят нули (

Спустя 18 минут, 32 секунды (21.04.2011 - 11:33) Renden написал(а):
Evilsoul
А нафиг они тебе?) Ну тогда поставь в конце условие типа WHERE такие-то_стобцы != 0

Спустя 5 минут (21.04.2011 - 11:38) Evilsoul написал(а):
+ Крассава smile.gif) а я парю мозг с функцией, бывают такие лажи(((

Спустя 14 минут, 14 секунд (21.04.2011 - 11:52) Evilsoul написал(а):
сегодня туплю как никогда((
не совсем нормально, я же исключу всё что с "0" а мне это нужно!

Спустя 35 секунд (21.04.2011 - 11:53) Evilsoul написал(а):
мне среднее нужно без ячеек с "0"

Спустя 34 минуты, 15 секунд (21.04.2011 - 12:27) Renden написал(а):
Evilsoul
Так вроде же данная функция выводит только 1 строку со среднем значением..
У тя получается вывод вроде же такой:
AVG_A80 | AVG_A92 | и тп
72912 | 93921 | и тп
Или нет?)

Спустя 31 минута (21.04.2011 - 12:58) Evilsoul написал(а):
да, одну.
Но она же считает, а если считает то по очереди, а если по очереди то можно фильтровать? или нет? )

Спустя 33 минуты, 19 секунд (21.04.2011 - 13:31) Renden написал(а):
Evilsoul
Хмм.. пойду покурю подумаю, так зачем тебе именно 0, чем тя null не устраивает?)

Спустя 29 минут, 11 секунд (21.04.2011 - 14:00) Evilsoul написал(а):
фишка в том что у меня в значениях при подсчете среднего значения может фигурировать 0 а это не есть верным при подсчете среднего, поэтому: сюда AVG_A80 мне нужно получить среднее без учета 0 а остальные данные вывести такими как есть...

Спустя 3 минуты, 19 секунд (21.04.2011 - 14:04) Renden написал(а):
Renden
Подумав, думаю никак, тк 0 это тоже число и AVG не может его игнорировать, отсюда 3 варианта:
1) Делать разные выборки SELECT 1 (SELECT 2 (SELECT 3)) и тп или UNION
2) Выбрать то что надо без AVG посчитать среднее на php
3) Поставить заместо 0 в базу null ; кстати ты так и не ответил зачем тебе 0 в базе ввиде числа, если ты его используешь как вывод то почемубы не поставить типа if($row[''] = null) echo "равно 0" невижу смысла. да и если надо переделать UPDATE test SET столбец=null where столбец=0 всем махом))

На твой последний месадж:
Ну тогда сделай отделный запрос вутри запроса 1 вариант)

Цитата
значениях при подсчете среднего значения может фигурировать 0 а это не есть верным при подсчете среднего

Эту строку не понял)

Спустя 53 минуты, 35 секунд (21.04.2011 - 14:57) Evilsoul написал(а):
 ROUND(AVG(IF(A80>0,A80,NULL)),2) AVG_A80, 
ROUND(AVG(IF(A92>0,A92,NULL)),2) AVG_A92,
ROUND(AVG(IF(A95>0,A95,NULL)),2) AVG_A95,
ROUND(AVG(IF(DT>0,DT,NULL)),2) AVG_DT,
ROUND(AVG(IF(gas>0,gas,NULL)),2) AVG_gas,


вот так

Спустя 4 минуты, 57 секунд (21.04.2011 - 15:02) inpost написал(а):
Evilsoul
А ещё лучше всякие операции вынести за пределы БД =)

Спустя 18 минут, 1 секунда (21.04.2011 - 15:20) Evilsoul написал(а):
inpost
Зачем? это то что мне нужно smile.gif и мне всегда казалось что если можно в СКУЛЕ сделать, то зачем это делать на ПШП?


_____________
Кто хочет, ищет возможности, кто не хочет - причины. /_ К. Маркс
Истенно велик тот человек который сумел овладеть своим временем. /_Гесиод VIII-VII вв. до Р. Х.
Медлительный непрерывно борится с бедами всю жизнь. /_Гесиод VIII-VII вв. до Р. Х.
Для того что бы увидеть радугу нужно пережить дождь.
Женщины: Хочется чего-то красного но синего.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.