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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2012, 22:04   #1
nastena_r_v
Пользователь
 
Регистрация: 22.05.2012
Сообщений: 30
Стрелка Среднее значение в DBGrid'e

Всем привет. Возник вопрос, как в созданной таблице, сделать запрос, на вычисление среднего значения в строке, и чтоб это значение выводилось в ту же таблицу, только в другую ячейку.
nastena_r_v вне форума Ответить с цитированием
Старый 20.10.2012, 22:14   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Для столбцов точно используется AVG. А вот для строк...

Предположим, есть таблица, где в 5 полях содержится пять сумм: SUM1,SUM2,SUM3,SUM4,SUM5

Тогда запрос будет:

Код:
SELECT SUM1,SUM2,SUM3,SUM4,SUM5, ((SUM1+SUM2+SUM3+SUM4+SUM5)/5) AS SRED
Где ((SUM1+SUM2+SUM3+SUM4+SUM5)/5) AS SRED мы объявляем новое поле, вычисляемое, равное среднему элементу строки
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.10.2012, 22:14   #3
nastena_r_v
Пользователь
 
Регистрация: 22.05.2012
Сообщений: 30
По умолчанию

да, и еще, Я думаю запрос надо написать с помощью функции AVG, но вот что именно писать я не знаю, И еще повторюсь, среднее значение нужно вычислить в СТРОКЕ, а не в столбце..
nastena_r_v вне форума Ответить с цитированием
Старый 20.10.2012, 22:15   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
помощью функции AVG
и

Цитата:
среднее значение нужно вычислить в СТРОКЕ
несовместимы. Читайте мой ответ выше.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.10.2012, 22:17   #5
nastena_r_v
Пользователь
 
Регистрация: 22.05.2012
Сообщений: 30
По умолчанию

Цитата:
Сообщение от nastena_r_v Посмотреть сообщение
да, и еще, Я думаю запрос надо написать с помощью функции AVG, но вот что именно писать я не знаю, И еще повторюсь, среднее значение нужно вычислить в СТРОКЕ, а не в столбце..
На счет АВГ... я тоже про эту функцию подумала, но мне строка нужна, а это со столбцом.
И про пример... А если у меня 15 полей, и не факт, что пользователь все 15 заполнит. Как быть??? =(
nastena_r_v вне форума Ответить с цитированием
Старый 20.10.2012, 22:23   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
не факт, что пользователь все 15 заполнит
Не волнуйтесь, если тип данных для поля установлен числовой, то там (обработка на уровне СУБД) нолик появится.

А для 15 полей... придется все 15 в запрос и в формулу вписывать.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 20.10.2012, 22:30   #7
nastena_r_v
Пользователь
 
Регистрация: 22.05.2012
Сообщений: 30
По умолчанию

Вы думаете это логично? О_О а укоротить никак, да? =) и вопрос, где я должна вписать этот запрос, в самом гриде?
nastena_r_v вне форума Ответить с цитированием
Старый 20.10.2012, 22:31   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Нолик там не появится, если хотя бы один NULL, то и резулт будет NULL. Каждое поле нужно функцией обработать. Например COALESCE(SUM1,0), если есть таковая в конкретной СУБД
Цитата:
где я должна вписать этот запрос, в самом гриде?
О-о-о. Не получится
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 20.10.2012, 22:33   #9
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Нолик там не появится, если хотя бы один NULL
Кстати, Вы правы, моя ошибка. Привык с dbf-ами работать, там появляется. А это на самом деле от СУБД зависит.


Цитата:
где я должна вписать этот запрос, в самом гриде?

В гриде Вы никакой запрос вписать не сможете. Грид - это компонент для отображения содержимого датасорса, а запрос должен быть вписан в самом датасорсе (конкретно - в TQuery из вкладки BDE или в ADOQuery из ADO и тп). И этот Query должен связываться с гридом.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 20.10.2012 в 22:37.
Sciv вне форума Ответить с цитированием
Старый 20.10.2012, 22:41   #10
nastena_r_v
Пользователь
 
Регистрация: 22.05.2012
Сообщений: 30
По умолчанию

АДО у меня =) ну на сколько я знаю, в адо квери есть прям свойство sql, просто можно и туда вписать запрос, я так понимаю, или лучше прям в код программы?
nastena_r_v вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Присвоить значение поле в DBGrid'e компоненту DBLookupComboBox2 фЁдОр БД в Delphi 14 07.09.2012 14:26
среднее значение KaZaaM SQL, базы данных 2 01.06.2012 16:18
Среднее значение Dima-War Общие вопросы C/C++ 7 23.03.2012 10:37
Среднее значение SB86 Microsoft Office Excel 3 08.06.2010 07:24
среднее значение tonic Microsoft Office Excel 1 04.01.2008 00:20