Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> AVG(ENUM), Правельный подсчет 
:(
    Опции темы
Mushu
Дата 11.3.2008, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 20.7.2004

Репутация: нет
Всего: -5



Есть таблица

_____________________________
nomer_voprosa (int) | otvet (ENUM)|
1                               | 0                   |
1                               | 1                   |
1                               | 0                   |
1                               | 0                   |
2                               | 0                   |
2                               | 1                   |
2                               | 1                   |
2                               | 0                   |
_____________________________

Вопрос как подсчитать среднеарифметический ответ  по полю OTVET  
Должно получиться : 0,25
А получается : 1.25

Код

SELECT  nomer_voprosa, AVG(otvet) FROM tabl WHERE nomer_voprosa = 1  GROUP BY nomer_voprosa
 
PM MAIL   Вверх
skyboy
Дата 12.3.2008, 01:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Цитата(Mushu @  11.3.2008,  17:12 Найти цитируемый пост)
otvet (ENUM)

а если произвести обработку, сменив тип на int?
PM MAIL   Вверх
Mushu
Дата 12.3.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 20.7.2004

Репутация: нет
Всего: -5



А это как..? тип в поле менять не льзя
PM MAIL   Вверх
skyboy
Дата 13.3.2008, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



итак, информация. 
в таблице данные типа enum хранятся не значениями, а индексами. т.е. у тебя реально в таблице хранятся не строки "0" и "1"(enum все же со строковыми значениями работает), а числа 1 и 2(потому как индекс 0 отведен для пустой строки; индекс 1 - первый элемент множества, т.е. "0" в твоем случае; индекс 2  - второй элемент множества - "1" в твоем случае). 
потому при попытке произвести арифметическую операцию(то ли сложение, то ли подсчет среднего) используются не значения enum'a(которые строковые по определению и могут быть любыми по содержанию), а индексы.
соотвественно, для твоего случая будет не ("0" + "1" + "0" + "0")  / 4, а (1 + 2 + 1 + 1) / 4. Что дает вполне корректное с точки зрения СУБД значение 1,25
Иллюстрацией к вышесказанному будет запрос:
Код

SELECT otvet + 0 /*можно любое число, но 0 хорошо тем, что никак не влияет на величину */
FROM my_table


Добавлено через 5 минут и 15 секунд
запрос вернет тебе не 0/1 в поле otvet, а 1 и 2
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0449 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.