![]() |
|
Модераторы: Akina |
![]()
|
|
| Flotskiy |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 15.11.2004 Где: г. Омск Репутация: 1 Всего: 2 |
Добрый день всем! Помогите советом или примером (VB6, Access97)
В таблице "Eksamen" есть поля : "Mat", "Him", "Fiz", "Rus"... записи: 1) 4 3 3 4 2) 4 4 5 3) 4 3 и т.д. (не все поля заполнены) Надо вывести запросом средний балл по записям
В Excel`e есть функция "СРЗНАЧ", вот что-то такое и в запрос нужно С уважением Это сообщение отредактировал(а) Flotskiy - 18.8.2006, 10:42 --------------------
FlotskiySk k |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
В SQL есть встроенная функция для вычисления среднего значения, сейчас точно не помню. А можно просто сложить значения полей и поделить их на количество столбцов.
-------------------- i_i (';') (V) ![]() |
|||
|
||||
| Flotskiy |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 15.11.2004 Где: г. Омск Репутация: 1 Всего: 2 |
Voldemar2004, не пойдет. Если бы все поля были заполнены, тогда другое дело.
А то в одной записи все поля заполнены, тогда делить на 4, в другой записи - заполнено два поля, тогда делить на 2... Всего доброго --------------------
FlotskiySk k |
|||
|
||||
| Voldemar2004 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1650 Регистрация: 25.12.2004 Репутация: 7 Всего: 23 |
Flotskiy, ну так это легко решается: проверка-цикл по строке - если строка не пуста (!NULL) увеличиваем счетчик i, в другую переменную - если строка не пуста - записываем сумму значений в строчке - дошли до конца строки - делим эту сумму на количество ненулевых столбцов, т.е. i.
Ну типа: 1 2 3 4 i = 4 , summa = 1 + 2 + 3 + 4, result = 2.5 2 3 1 i = 3 , summa = 2 + 3 + 1, result = 2 3 4 i = 2 , summa = 3 + 4, result = 3.5 Добавлено @ 12:49 Можно использовать (да и нужно) объект ADO RecordSet и написать простенькую функцию. -------------------- i_i (';') (V) ![]() |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 34 Всего: 454 |
Flotskiy, как обычно, все проблемы - от неверной структуры БД.
Переделай таблицу в следующую: ID (primary IDX) StudentID SubjectID Mark и запрос твой родится играючи. Да и куча иных задач станет в выполнении проще. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Flotskiy |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 15.11.2004 Где: г. Омск Репутация: 1 Всего: 2 |
Akina, Структура БД такова:
Табл. "Glavnaua", имеет счетчик GlavID, поля "Family", и т.д. Табл. "Eksamen", имеет индексированное поле "EksID"( для связывания с табл1), поля "MatE", "HimE", "FizE", "RusE", Запрос такой:
Таблица выводится без проблем, но надо в дополнительном столбце вычислить среднее значение по каждой записи. Не пойму, что не ясно? Всего доброго Это сообщение отредактировал(а) Flotskiy - 19.8.2006, 05:54 --------------------
FlotskiySk k |
|||
|
||||
| Тутанхамец |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 612 Регистрация: 10.10.2005 Где: в пирамидЕ! Репутация: 4 Всего: 6 |
Akina абсолютно прав. Если переделать структуру, запрос будет выглядеть элементарно. Что-то типа:
SELECT AVG(Mark) AS Среднее FROM Marks WHERE Family="Иванов" Функция AVG считает среднее ПО СТРОКАМ, а не ПО СТОЛБЦАМ. С точки зрения реляционных БД считать среднее по одной строке нескольких столбцов - абсурд, так как все данные, по которым в принципе может понадобиться считать среднее, должны быть в строках одного столбца. А раз уж таблица такая неправильная, то может тебе считать среднее на этапе заполнения таблицы и писать его в отдельный столбец? |
|||
|
||||
| Flotskiy |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 223 Регистрация: 15.11.2004 Где: г. Омск Репутация: 1 Всего: 2 |
Тутанхамец, Благодарю всех за содействие. Если бы заказчик сразу сказал, что надо будет выводить среднее значение, то, конечно, в таблице добавить доп. поле и расчет проводить при вводе инфы. У меня в другом месте, с другими данными так и делается. Ну да ладно, как нибудь...
Благодарю всех, наилучшие пожелания --------------------
FlotskiySk k |
|||
|
||||
![]()
|
| Правила форума "VB6" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB6 | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |