2016-05-04 2 views
0

У меня есть «вопросы» за столом с колоннами
USERID
QID (вопрос ID)
ответаMySql количество запросов и отчетливый

вопросами являются множественным выбором, так не каждый вопрос имеет такое же количество ответов через пользователь может выбрать.
вопрос 100 может иметь 4 ответа на выбор.
вопрос 200 может иметь 6 ответов на выбор.
вопрос 300 может иметь 2 ответа на выбор.
и т.д.
Так что таблица может выглядеть следующим образом:

+-------- --+---------+--------+ 
| userid | qid | answer | 
+---- ------+---------+--------+ 
| 1  | 100 | 4 | 
| 1  | 200 | 6 | 
| 1  | 300 | 1 | 
| 1  | 400 | 4 | 
| 2  | 100 | 1 | 
| 2  | 400 | 6 | 
| 3  | 200 | 4 | 
| 3  | 400 | 4 | 
| 3  | 100 | 1 | 
| 4  | 100 | 1 | 
| 4  | 400 | 6 | 
| 5  | 200 | 1 | 
| 5  | 400 | 6 | 
+-----------+---------+--------+ 

Я хочу знать, что счетчик для наиболее данного ответа на вопрос 100, то, что отсчет для второго самого высокого ответа на вопрос 100, каков счет для 3-го наивысшего ответа на вопрос 100 и т. д.

Я не могу понять, как запросить это и не уверен, что это возможно. Я бы результаты, чтобы быть что-то вроде:

+------+----+----+----+----+----+----+----+ 
| qid |ans1|ans2|ans3|ans4|ans5|ans6|ans7| 
+------+----+----+----+----+----+----+----+ 
| 100 | 3 | 0 | 0 | 1 | 0 | 0 | 0 | 
| 200 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 300 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 
| 400 | 0 | 2 | 0 | 0 | 0 | 3 | 0 | 
+------+----+----+----+----+----+----+----+ 

ответ

1

группы по вопросам, а затем вы можете использовать агрегатные функции, такие как sum(), которые относятся к каждой группе. И вы можете использовать условие в sum() для выполнения условного суммирования

select qid, 
     sum(answer = 1) as ans1, 
     sum(answer = 2) as ans2, 
     sum(answer = 3) as ans3, 
     sum(answer = 4) as ans4, 
     sum(answer = 5) as ans5, 
     sum(answer = 6) as ans6, 
     sum(answer = 7) as ans7, 
     count(*) as total 
from your_table 
group by qid 
+0

спасибо! это сработало. Еще один вопрос: как бы добавить еще один столбец, который показывает, сколько раз в целом на вопрос был дан ответ? – altoids

+1

Я обновил ответ –

+0

Есть ли способ сортировки столбцов ans1, ans2 и т. Д. В порядке убывания? Сначала показывает столбец с наивысшим числом? – altoids