2012-07-04 4 views
4

사용자가 3 개의 질문에 대한 답변을 제출 한 데이터베이스 테이블이 있습니다. 질문에 대한 모든 대답은 예/아니오 응답입니다. 이와 같이여러 열의 개수 값 mysql

username  question1   question2   question3 

user1   yes    no    yes 
user2   yes    yes    yes 
user3   yes    no    no 
user4   no     no    no 

내가 원하는 것은 각 열의 '예'수를 수집하는 것입니다. 그래서 각 질문에 대해 'question1'= '3', question2 = '1'등의 질문에 대해 yes를 사용합니다.

현재 각 질문마다 3 가지 별도의 진술이 있지만 더 효과적 이도록 한 문장으로 결합 할 수있는 방법이 있는지 궁금하십니까?

+1

SQL 문을 게시하여 결합 대상을 표시 할 수 있습니까? – Feanor

+0

int 값 (문제를 일으킬 수있는 문자열이 아니라)을 사용한다면, 예를 들자면 1, 그렇지 않은 경우 0을 각 열에 합계를 사용할 수 있습니다. – mishu

+0

이론 상으로는 가능할 수도 있지만 의심 스럽습니다. 많은 자체 참여와 노조가 필요합니다. – GordonM

답변

4

문을 둘러싼 간단한 집계 SUM() (GROUP BY)을 사용하여이 작업을 수행 할 수 있습니다. 값이 yes이면 1을 반환하고 그렇지 않으면 0을 반환합니다. 그런 다음 1을 SUM()을 통해 열에 추가합니다.

SELECT 
    SUM(CASE WHEN question1 = 'yes' THEN 1 ELSE 0 END) AS q1, 
    SUM(CASE WHEN question2 = 'yes' THEN 1 ELSE 0 END) AS q2, 
    SUM(CASE WHEN question3 = 'yes' THEN 1 ELSE 0 END) AS q3 
FROM yourtable 

MySQL은 또한 1 또는 0을 반환하는 간단한 부울 비교를 허용 할 것이다, 그러나 이것은 다른 RDBMS로 이식 할 수 없습니다.

/* Shorter version, only works for MySQL */ 
SELECT 
    SUM(question1 = 'yes') AS q1, 
    SUM(question2 = 'yes') AS q2, 
    SUM(question3 = 'yes') AS q3 
FROM yourtable