4

我有一个数据库表,其中包含用户提交的 3 个问题的答案。所有问题的答案都是是/否答案。像这样

username        question1          question2         question3

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

我想要做的是收集每列中每个“是”的计数。所以我会为每个问题获得肯定的数量,即'question1' ='3',question2 ='1'等。

目前,每个问题我都有 3 个单独的陈述,效果很好,但我只是想知道是否有办法将这些陈述组合成一个陈述以使其更有效?

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 回答