与SQL: Count each row value in a column and return count into multiple column
不同我的行也不同。 我想要这样的投票计数结果。
CONTENT_NO CONTENT_TEXT one two three four(ANSWER_SCORE)
1 How often? 0 1 0 1
2 How fast? 0 1 0 1
3 How long? 0 0 2 0
4 How much? 1 1 0 0
我有2张桌子
question_content
CONTENT_NO CONTENT_TEXT TEST_PAPER_NO
1 How often? 1
2 How fast? 1
3 How long? 1
4 How much? 1
question_content_answer
ANSWER_NO CONTENT_NO TEST_PAPER_NO ANSWER_SCORE PERSON_NO
1 1 1 4 1
2 2 1 4 1
3 3 1 3 1
4 4 1 2 1
5 1 1 2 2
6 2 1 2 2
7 3 1 3 2
8 4 1 1 2
我试过了
SELECT question_content.CONTENT_NO,
question_content.CONTENT_TEXT,
(SELECT COUNT(ANSWER_SCORE)
FROM (SELECT ANSWER_SCORE
FROM question_content_answer
WHERE TEST_PAPER_NO= '1'
) as qa
WHERE ANSWER_SCORE = '1'
AND CONTENT_NO = qa.CONTENT_NO
GROUP BY CONTENT_NO
) as one,
(SELECT COUNT(ANSWER_SCORE)
FROM (SELECT ANSWER_SCORE
FROM question_content_answer
WHERE TEST_PAPER_NO= '1'
) as qa
WHERE ANSWER_SCORE = '2'
AND CONTENT_NO = qa.CONTENT_NO
GROUP BY CONTENT_NO
) as two,
(SELECT COUNT(ANSWER_SCORE)
FROM (SELECT ANSWER_SCORE
FROM question_content_answer
WHERE TEST_PAPER_NO= '1'
) as qa
WHERE ANSWER_SCORE = '3'
AND CONTENT_NO = qa.CONTENT_NO
GROUP BY CONTENT_NO
) as three
FROM question_content_answer
INNER JOIN question_content
USING (CONTENT_NO)
WHERE question_content.TEST_PAPER_NO= '1'
但这会计算每一行中的所有问题。
如何计算每一行?
答案 0 :(得分:1)
就像SQL: Count each row value in a column and return count into multiple column
一样此代码工作正常。
SELECT question_content.CONTENT_NO,
question_content.CONTENT_TEXT,
COUNT(CASE WHEN ANSWER_SCORE = '1' THEN 1 END) AS one,
COUNT(CASE WHEN ANSWER_SCORE = '2' THEN 1 END) AS two,
COUNT(CASE WHEN ANSWER_SCORE = '3' THEN 1 END) AS three,
COUNT(CASE WHEN ANSWER_SCORE = '4' THEN 1 END) AS four
FROM question_content_answer
INNER JOIN question_content
USING (CONTENT_NO)
WHERE question_content.TEST_PAPER_NO = '1'
GROUP BY question_content.CONTENT_NO