0

我有一个像Results这样的sqlite表,并且想通过计算选项的数量来制作一个像finalResults这样的表。我正在使用 sqlite

   Table Name: Results           Table Name: finalResults
   ___________ _________         __________  _______  ________  _______  _______
    questionId| optionId         questionId| option1 | option2 |option3 |option4
    --------------------         -----------------------------------------------    
       40     | 3                40        | 1       |  2      | 4     | 1
       40     | 3                41        | 2       |  1      | 1      | 3
       40     | 2
       40     | 4
       40     | 2
       40     | 1
       40     | 3
       40     | 3
       41     | 1
       41     | 3
       41     | 2
       41     | 4
       41     | 4
       41     | 4
       41     | 1

谢谢

4

2 回答 2

2

你可以这样做

INSERT INTO finalResults(questionId, option1, option2, option3, option4)
SELECT questionId,
       MIN(CASE WHEN optionid = 1 THEN n END) option1,
       MIN(CASE WHEN optionid = 2 THEN n END) option2,
       MIN(CASE WHEN optionid = 3 THEN n END) option3,
       MIN(CASE WHEN optionid = 4 THEN n END) option4
  FROM
(
  SELECT questionId, optionid, COUNT(*) n
    FROM results
   GROUP BY questionId, optionid
) q
 GROUP BY questionId

这是SQLFiddle演示

或者

INSERT INTO finalResults(questionId, option1, option2, option3, option4)
SELECT questionId,
       SUM(CASE WHEN optionid = 1 THEN 1 ELSE 0 END) option1,
       SUM(CASE WHEN optionid = 2 THEN 1 ELSE 0 END) option2,
       SUM(CASE WHEN optionid = 3 THEN 1 ELSE 0 END) option3,
       SUM(CASE WHEN optionid = 4 THEN 1 ELSE 0 END) option4
  FROM results 
 GROUP BY questionId

这是SQLFiddle演示

两种情况下的输出:

| 问题ID | 选项1 | 选项2 | 选项3 | 选项4 |
-------------------------------------------------- ----
| 40 | 1 | 2 | 4 | 1 |
| 41 | 2 | 1 | 1 | 3 |
于 2013-08-16T05:57:53.470 回答
0

尝试以下查询

select questionId,
sum(optionId==1) as option1,
sum(optionId==2) as option2,
sum(optionId==3) as option3
from results
group by questionId

或 sqlfiddle http://sqlfiddle.com/#!7/415b7/6(打开到 chrome & safari)

于 2013-08-16T06:07:44.637 回答