2013-10-08 5 views
-1

У меня есть таблица с 320 столбцами. Каждый столбец может содержать одну из пяти букв (a, b, c, d, e) - тест с множественным выбором. Теперь я хотел бы выполнить статистический анализ, имея в виду, что если девять из 10 человек, ответивших на вопрос «b», «b», скорее всего, верны.Лучший способ выполнить статистический анализ в MySQL

Как это можно сделать наиболее эффективным способом? Я думал о представлении с порядком и ограничениями, но эффективен ли он для 320 столбцов?

+1

[База данных Нормализация] (http://en.wikipedia.org/wiki/Database_normalization) – Kermit

+0

Сколько строк в вашей таблице? Возможно, вам лучше копировать все это в приложение для работы с электронными таблицами, такое как Excel, и выполнять свой анализ там. Приложения таблиц лучше подходят для выполнения идентичных операций на многих столбцах, если количество записей не слишком велико (менее 50 000 или около того). – Dan

+0

Я действительно не вижу причины для нисходящего ... – Jan

ответ

0

вам нужно сделать математику для каждой колонки. sql вычисляется по строкам.

, чтобы получить количество ответов на каждый вопрос:

select * from 
(select a as answer union select b union select c union select d union select e) answers 

left join 
(select answer_to_q1 as answer, count(*) as q1 from table group by 1) q1 on q1.answer=answers.answer 

left join 
(select answer_to_q2 as answer, count(*) as q2 from table group by 1) q2 on q2.answer=answers.answer 

... repeat for all columns 

, чтобы получить ответ с самыми высокими подсчетами, где q1, q2 и т.д. являются столбцами, которые имеют свои ответы на q1 q2 ..

select 1 as question, q1 from table group by q1 order by count(*) desc limit 1 
union all 
select 2, q2 from table group by q1 order by count(*) desc limit 1 
.... 
0

Ваша схема далеко не оптимальна.

Если вы нормализуете свою структуру данных, вы обнаружите, что это намного проще. Составьте таблицу с именем ответ:

create table answer (
    questionnaire_id int, -- an id number for which questionnaire this is 
    question_id int,  -- the id number of the question 
    answer enum('a','b','c','d','e') -- the value of the answer 
); 

Тогда вы можете посмотреть на распределение каждого вопроса с запросами, как это:

select question_id, answer,count(*) 
from answer 
group by question_id, answer; -- just one example of how to look at the answers 
Смежные вопросы