Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2014, 10:36   #1
Varabei
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 15
Радость Среднее значение без учета

Привет!

Задача. Выбрать среднее значение из столбца с типом double precision, при этом не учитывать нулевые значения.

Делаю с помощью AVG, нулевые значения учитываются .
Varabei вне форума Ответить с цитированием
Старый 26.02.2014, 10:39   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну так опиши where в котором будут отсекаться нули.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.02.2014, 11:18   #3
Varabei
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну так опиши where в котором будут отсекаться нули.
С where не получиться. Вот запрос:
Код:
SELECT to_char(datetime, 'YYYY-MM-DD HH24') as date, 
             avg(right_bottom) + avg(right_middle) + avg(right_top) as right,
             avg(left_bottom) + avg(left_middle) + avg(left_top) as left,
             avg(right_bottom) + avg(right_middle) + avg(right_top) + avg(left_bottom) + avg(left_middle) + avg(left_top) as total
            FROM db_asutp_1ceh.gas_flow 
            WHERE datetime >='".$date1."' AND datetime <= '".$date2."'                 
            GROUP BY date
            ORDER BY date
в итоге получаем три стлобца right, left, total в каждом среднее значение за час.
Данные в БД скидываютя первые полчаса в 'right' вторые в 'left'.
Если добавить в where
Код:
                  AND right_bottom > 0 
                 AND right_middle > 0
                 AND right_top > 0
                 AND left_bottom > 0 
                 AND left_middle > 0
                 AND left_top > 0
то выборка вернёт 0.
Может быть avg не учитывает NULL? и вместо нуля записывать его
Varabei вне форума Ответить с цитированием
Старый 26.02.2014, 11:20   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

у вас нули это 0 или NULL?
ибо ваше условие на >0 ожидает именно 0, а NULL пропустит.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.02.2014, 11:49   #5
Varabei
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
у вас нули это 0 или NULL?
ибо ваше условие на >0 ожидает именно 0, а NULL пропустит.
В столбцах записаны числа либо 0 либо > 0, NULL там нет.

Необходимо чтобы в определении среднего значения нулевые игнорировались
Varabei вне форума Ответить с цитированием
Старый 26.02.2014, 11:52   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

тогда второй вопрос.
у вас точно есть строки где ВСЕ 6 полей более нуля одновременно?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 26.02.2014, 12:03   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

С avg тут не получится одним запросом. Суммируйте и считайте количество не нулевых для каждого поля, а потом делите на это кол-во. Количество может быть и нулем

ADD

Возможно прокатит и одним запросом в виде
Код:
avg(CASE WHEN right_bottom=0 THEN NULL ELSE right_bottom END)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 26.02.2014 в 12:13.
Аватар вне форума Ответить с цитированием
Старый 26.02.2014, 12:10   #8
Varabei
Пользователь
 
Регистрация: 28.10.2008
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
тогда второй вопрос.
у вас точно есть строки где ВСЕ 6 полей более нуля одновременно?
запись в поля идет так:
Сначала пол часа идёт запись в поля с префиксом 'right' c интервалом 5 секунд, в это время в поля с префиксом 'left' записываются нули (но не исключено что в left могут попасть и числа > 0. т.к данные идут с датчиков ).
следующие пол часа на оборот. и так далее.
Varabei вне форума Ответить с цитированием
Старый 26.02.2014, 12:19   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

если
Цитата:
при этом не учитывать нулевые значения.
означает хотя бы одно из шести возможных >0,
то в приведенном коде
Цитата:
Код:


AND right_bottom > 0
AND right_middle > 0
AND right_top > 0
AND left_bottom > 0
AND left_middle > 0
AND left_top > 0
следует заменить and на or.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 26.02.2014, 12:21   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
следует заменить and на or
Не поможет, если правильно понял чего ТС хочется
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Минимальное значение без учета пустых ячеек mrantonio Microsoft Office Excel 4 26.06.2011 14:22
Поиск без учета регистра Alex2391 Общие вопросы Delphi 7 22.03.2011 08:39
Поиск без учета регистра MSD БД в Delphi 15 12.05.2010 15:49
Поиск без учета регистра Cartman18 БД в Delphi 2 15.10.2009 15:18
Lookup без учета регистра ИВАНьКа Общие вопросы C/C++ 1 30.08.2009 12:48