4

ユーザーが送信した 3 つの質問に対する回答を含むデータベース テーブルがあります。質問に対するすべての答えは、はい/いいえの答えです。そのようです

username        question1          question2         question3

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

私がやりたいことは、各列の「はい」の数を収集することです。したがって、各質問の「はい」の数、つまり「質問1」=「3」、質問2 =「1」などになります。

現時点では、問題なく機能する各質問に対して 3 つの個別のステートメントがありますが、これらを 1 つのステートメントに組み合わせてより効果的にする方法があるかどうか疑問に思っていました。

4

1 に答える 1

4

これは、ステートメントを囲む単純な集計SUM()(なし) で実行できます。値が の場合は1 を返し、それ以外の場合は 0 を返します。これらの 1 は、 を介して列に追加されます。GROUP BYCASEyesSUM()

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
于 2012-07-04T11:39:40.923 に答える